Below is the code for reversing a number (in the standard way)
#include <stdio.h>
int main()
{
int result=0;
int q,n,rem;
printf("enter number: ");
scanf("%d",&n);
q=n;
while(q!=0){
rem=q;
result=result*10 rem;
q=q/10;
}
printf("reversed number is: %d",result);
return 0;
}
But I was thinking whether there is a way to find the reversed program using the expanded form of numbers?
For example: If the input to the program is 123, then the required output would be 321 which can be written as 3 * 100 2 * 10 1 * 1
CodePudding user response:
There is no particular logic like that,if you are interested to acheive that kind of output, you can just come up with something like this
#include <stdio.h>
#include <math.h>
int main()
{
int result=0;
int q,n,rem;
printf("enter number: ");
scanf("%d",&n);
q=n;
int number[100];
for (int i = 0; i < 100 ; i ){
number[i] = -1;
}
int i=0;
while(q!=0){
rem=q;
number[i ]= rem;
q=q/10;
}
int size=0;
for (i = 0; i < 100 ; i ){
if(number[i]== -1) break;
else{
size ;
}
}
int tenPowers= size;
for(int i=0; i<=size-1 && tenPowers>=0 ;i ){
printf("%dx%d", number[i],(int)pow(10,tenPowers-1));
tenPowers=tenPowers-1;
if(tenPowers>=0) printf(" ");
}
return 0;
}
CodePudding user response:
You can have this. It's not reversing, but it's formatting the output for you. Reversing a binary number or a string is not difficult.
int main() {
int n = 123456;
char in[16], obuf[] = " x*10000000";
sprintf( in, "%d", n );
int rev = strlen( in ) 2;
for( int o=3, i=0; (obuf[3] = in[i]) != '\0'; o=0, i )
printf( "%.*s", rev 3-o-i-(in[i 1]?0:2), obuf o );
return 0;
}
Output
1*100000 2*10000 3*1000 4*100 5*10 6
You can expand the sizes to suit your needs.
CodePudding user response:
Adding to the answer provided by Fe2O3:
Siddharth -- your program does not properly handle a number with trailing zeroes. Try this version instead:
/* reversenumber.c
reverse the digits of a non-negative integer and display it on the terminal
note: uses an advanced formatting option of printf() to handle any trailing zeroes
e.g. 500 produces 005
*/
#include <stdio.h>
int main (void)
{
printf("\n"
"Enter the number: ");
int number;
scanf("%d", &number);
// numerically reverse number
int reverse = 0;
int digitCount = 0;
do {
reverse = reverse * 10 number % 10;
digitCount;
number /= 10;
}
while (number > 0);
// display reversed number; .* represents a variable that specifies the
// field width (the minimum number of digits to display for an integer
// and with unused digits filled by leading zeroes)
printf("reversed number : %.*d\n", digitCount, reverse);
return 0;
}