我有这段简单的整数反转代码。但是我现在需要为另一个项目反转前导 0 的数字。例如,这个程序可以将 32 转换为 23,但它也可以将 3200 转换为 23。我需要 0 才能保持领先地位。但是我已经看到可以完成这项工作的位级别的二进制操作,我正在寻找一种方法(如果有的话)来完成它而不使用按位操作并保持简单。
#include <stdio.h>
int main()
{
int a, mod = 0, reverse = 0;
printf("Enter a number:");
scanf_s("%d", &a);
while(a!=0)
{
mod=a%10;
reverse = reverse * 10 + mod;
a=a/10;
}
printf("%d", reverse);
return 0;
}
最佳答案
读取整数时用"%n"
记录扫描偏移量。
使用数字的文字宽度来控制反转打印
int main() {
int a, mod = 0, reverse = 0;
printf("Enter a number:");
int n1, n2;
scanf(" %n%d%n", &n1, &a, &n2);
int width = n2 - n1;
while (width-- > 0) {
mod = a % 10;
reverse = reverse * 10 + mod;
a = a / 10;
}
printf("%0*d", n2-n1, reverse);
return 0;
}
例子
Enter a number:00123
32100
Enter a number:12300
00321
其他未处理的注意事项。
符号字符
'+'
或'-'
。输入超出
int
范围int
范围外的反转数字。非数字输入。
关于c - 在C中的最后一个位置反转一个带有0的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099915/