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