Write a C program to reverse digits of a number
ITERATIVE WAY
Algorithm:
Algorithm:
Input: num (1) Initialize rev_num = 0 (2) Loop while num > 0 (a) Multiply rev_num by 10 and add remainder of num divide by 10 to rev_num rev_num = rev_num*10 + num%10; (b) Divide num by 10 (3) Return rev_num
Example:
num = 4562
rev_num = 0
num = 4562
rev_num = 0
rev_num = rev_num *10 + num%10 = 2
num = num/10 = 456
num = num/10 = 456
rev_num = rev_num *10 + num%10 = 20 + 6 = 26
num = num/10 = 45
num = num/10 = 45
rev_num = rev_num *10 + num%10 = 260 + 5 = 265
num = num/10 = 4
num = num/10 = 4
rev_num = rev_num *10 + num%10 = 265 + 4 = 2654
num = num/10 = 0
num = num/10 = 0
Program:
#include <stdio.h> /* Iterative function to reverse digits of num*/ int reversDigits( int num) { int rev_num = 0; while (num > 0) { rev_num = rev_num*10 + num%10; num = num/10; } return rev_num; } /*Driver program to test reversDigits*/ int main() { int num = 4562; printf ( "Reverse of no. is %d" , reversDigits(num)); getchar (); return 0; } |
Time Complexity: O(Log(n)) where n is the input number.
RECURSIVE WAY
Thanks to Raj for adding this to the original post.
Thanks to Raj for adding this to the original post.
#include <stdio.h>; /* Recursive function to reverse digits of num*/ int reversDigits( int num) { static int rev_num = 0; static int base_pos = 1; if (num > 0) { reversDigits(num/10); rev_num += (num%10)*base_pos; base_pos *= 10; } return rev_num; } /*Driver program to test reversDigits*/ int main() { int num = 4562; printf ( "Reverse of no. is %d" , reversDigits(num)); getchar (); return 0; } |
Time Complexity: O(Log(n)) where n is the input number
Note that above above program doesn’t consider leading zeroes. For example, for 100 program will print 1.
No comments:
Post a Comment