Home > Software design >  Different algorithm for reversing a number using expanded form of numbers
Different algorithm for reversing a number using expanded form of numbers

Time:09-17

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;
}
  • Related