You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

整数反转时得到无意义值-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:40:59