整数反转时得到无意义值-1005348639的问题求助
问题分析与解决方案
核心问题
你的代码出现无意义负数结果,主要有两个原因:
- 未初始化变量:
numero_invertido是局部变量,声明后未赋值,初始值为内存随机垃圾值,直接参与计算会导致结果混乱。 - 整数溢出:当反转后的数值超出
int类型的常规范围(-2147483648 到 2147483647),会触发整数溢出,这是C语言中的未定义行为,常见表现为数值回绕成无意义负数。
修复后的代码
#include <stdio.h> #include <stdlib.h> int main() { int numero, digito; // 初始化反转数为0,避免垃圾值干扰 long long numero_invertido = 0; printf("Ingrese un numero: "); scanf("%d", &numero); // 处理正负号,先取绝对值反转,最后恢复符号 int signo = 1; if (numero < 0) { signo = -1; numero = -numero; } while(numero > 0){ digito = numero % 10; numero = numero / 10; numero_invertido = numero_invertido * 10 + digito; // 检查是否超出int范围,提前报错 if (numero_invertido > 2147483647 || numero_invertido < -2147483648) { printf("Error: El numero invertido excede el rango de int\n"); return 1; } } // 恢复原数符号 numero_invertido *= signo; printf("El numero invertido es %lld\n", numero_invertido); return 0; }
关键修改点
- 初始化
numero_invertido为0,消除垃圾值影响。 - 使用
long long类型存储反转结果,扩大存储范围,便于检测溢出。 - 增加正负号处理逻辑,支持负数反转。
- 添加溢出检查,当反转值超出
int范围时直接提示错误,避免无意义输出。 - 移除仅处理大于999的数的限制,让代码适配更多输入场景。
内容的提问来源于stack exchange,提问作者Sofia Rossi
相关产品推荐
相关产品推荐

