-5

Below program takes an integer value and returns the number with its digits reversed. Works okay for numbers like 6540063 or 675 or 9600012 but does not output correct for 630 ,50 or 10 for numbers which end with 0. 630 returns 36. I don't understand why. Can you suggest what should I add? This looks like a spaghetti code isn't it?

#include <stdio.h>
#include <math.h>

void getDigit(int number);
void getReverse(int number);

int main(void) {

int namba=630;    //Enter here number to be reversed

getReverse(namba);

return 0;
}

void getDigit(int number) {

int div=1,reverse=0,count=0,i=0;

//to find max dividend
while (number>10*div){
    div*=10;  
    ++count;                                        
}       

while(div!=0&&i<=count){

    printf("%d ",number/div);
    number=number%div;
    div/=10;

}

}

void getReverse(int number){

int div=1,reverse=0,count=0,i=0;
    //to find max dividend
while (number>10*div){
    div*=10;  
    ++count;                                        
}       

while(div!=0&&i<=count){

    reverse+=(number/div)*pow(10,i++);      //to find reverse digits  
    number=number%div;
    div/=10;

}

printf("Reverse is: %d\n",reverse);

getDigit(reverse);

}
Lyrk
  • 1,936
  • 4
  • 26
  • 48

2 Answers2

7

Because you're losing the leading zero.

036 = 36

Sten Petrov
  • 10,943
  • 1
  • 41
  • 61
2
void getReverse(int number){
    ...
    printf("Reverse is: %0*d\n",count + 1,reverse);
    ...
}
Valeri Atamaniouk
  • 5,125
  • 2
  • 16
  • 18