反转给定的数字

Reverse a given number

如果输入数字10000如何处理测试用例 结果我得到 1 而不是 00001。 如何处理?

    #include <stdio.h>
    int main() {
      int n, rev = 0, remainder;
      printf("Enter an integer: ");
      scanf("%d", &n);
      while (n != 0) {
         remainder = n % 10;
         rev = rev * 10 + remainder;
         n /= 10;
     }
     printf("Reversed number = %d", rev);
     return 0;
    }

记录您号码中的位数,然后打印具有格式化长度的号码:

int numDigits = 0;
while (n != 0) {
    ...
    numDigits++;
}

然后:

printf("Reversed number = %.*d", numDigits, rev);

一般情况下,颠倒的数字不能放入其类型的对象中。

最好使用类型unsigned int而不是类型int。否则你会得到意想不到的结果。

你只需要在宽度等于输入数字中的数字位数的字段中输出反转数字,如果需要,前缀为零。

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    const unsigned int Base = 10;
    
    unsigned int n = 0;
      
    printf( "Enter an integer: " );
    scanf( "%u", &n );
      
    unsigned int rev = 0;
    int count = 0;
      
    do
    {
        rev = rev * Base + n % Base;
        ++count;
    } while ( n /= Base );
    
    printf( "Reversed number = %0*u", count, rev );
    
    return 0;
}

程序输出可能看起来像

Enter an integer: 10000
Reversed number = 00001

使用%n 说明符计算输入的位数。请注意第一个 %n 之前的 space 以跳过任何白色 space。如果输入不是范围内的整数,这也会失败。
然后使用位数用前导零填充输出 %0*d

尝试输入 1000000001

#include <stdio.h>
int main ( void) {
    int n, rev = 0, remainder;
    int start = 0;
    int stop = 0;
    printf ( "Enter an integer: ");
    scanf ( " %n%d%n", &start, &n, &stop);
    int digits = stop - start;
    while ( n != 0 || digits) {
        --digits;
        remainder = n % 10;
        rev = rev * 10 + remainder;
        n /= 10;
    }
    printf ( "Reversed number = %0*d", stop - start, rev);
    return 0;
}

输出:

Enter an integer: 00002
Reversed number = 20000
Enter an integer: 3000
Reversed number = 0003