C语言数字反转程序输入10000输出1而非00001的问题如何处理
你遇到的问题本质是整数类型的存储特性导致前导零丢失:C语言中int存储的是纯数值,00001和1的数值完全相等,编译器会自动忽略无意义的前导零,所以用int存储反转结果自然会把原数字末尾的0(反转后变成前导零)丢掉。
解决方案1:保留整数反转逻辑,输出时补前导零
如果你不想改动原有的反转计算逻辑,可以额外记录原始输入的数字位数,输出时按原长度补前导零即可,代码修改如下:
#include <stdio.h> int main() { int n, rev = 0, remainder, original_n, len = 0; printf("Enter an integer: "); scanf("%d", &n); original_n = n; // 保存原始输入值计算位数 // 兼容输入为0的场景 if (original_n == 0) { len = 1; } else { // 计算原始数字的位数 while(original_n != 0) { len++; original_n /= 10; } } // 原有反转逻辑不变 while (n != 0) { remainder = n % 10; rev = rev * 10 + remainder; n /= 10; } // 按原位数输出,不足的位置补前导零 printf("Reversed number = %0*d", len, rev); return 0; }
输入10000时,原位数是5,输出时会自动补够5位,结果为00001。
解决方案2:直接用字符串反转(更通用)
如果不需要对反转后的数值做计算,仅需要输出反转后的字符串形式,直接按字符串处理更简单,还能避免整数溢出、负数处理、前导零丢失等问题,代码如下:
#include <stdio.h> #include <string.h> int main() { char str[20]; printf("Enter an integer: "); scanf("%s", str); int len = strlen(str); printf("Reversed number = "); for(int i = len - 1; i >= 0; i--) { putchar(str[i]); } return 0; }
该方案可以原样保留所有字符,输入10000直接输出00001,也支持超长数字的反转需求。
内容的提问来源于stack exchange,提问作者Segmentation fault
相关产品推荐
相关产品推荐

