反转给定的数字
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
。
尝试输入 10000
和 00001
。
#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
如果输入数字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
。
尝试输入 10000
和 00001
。
#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