Write an optimal C program to reverse digits of a number.Also check whether the number is palindromic or NOT
Iterative Way:
//4562 ->2654
int reversDigits(int num)
{
int rev_num = 0;
while(num > 0)
{
rev_num = rev_num*10 + num%10;
num = num/10;
}
return rev_num;
}
Time Complexity: O(Log(n)) where n is the input number.
Recursive way:-
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;
}
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.
For printing Trailing Zeros:-------------
Iterative Way:
//4562 ->2654
int reversDigits(int num)
{
int rev_num = 0;
while(num > 0)
{
rev_num = rev_num*10 + num%10;
num = num/10;
}
return rev_num;
}
Time Complexity: O(Log(n)) where n is the input number.
Recursive way:-
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;
}
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.
For printing Trailing Zeros:-------------
#include<stdio.h>void reversDigits(unsigned int num){ int rev_num = 0,zeros=0; while(num >0) { /*count trailing zeroes, i.e., for 100 zeros will be 2*/ if(num%10==0) { zeros++; num = num/10; } else break; } /* Get the reverse number */ while(num > 0) { rev_num = rev_num*10 + num%10 ; num = num/10; } /* print leading zeroes in reverse number */ while(zeros--) printf("0"); /* print reverse number */ printf("%d\n",rev_num);}int main(){ unsigned int x = 100; reversDigits(x); getchar();}
No comments:
Post a Comment