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

C++面向对象实现回文数遇有符号整数溢出问题求助

解决C++回文数判断中的整数溢出与逻辑错误

原代码存在的问题

  • rev未初始化:局部变量默认是随机垃圾值,直接用rev * 10计算会导致逻辑混乱。
  • 未处理负数与特殊正数:负数不可能是回文(带负号);末尾为0但本身不是0的数(如120),反转后必然不等于原数,原代码未提前排除这些情况。
  • 反转时无溢出检查:当输入较大正数(如1999999999),rev * 10 + x%10会超出int的最大值(2^31-1=2147483647),触发有符号整数溢出的未定义行为,也就是你遇到的错误。
  • 类名拼写错误:Solutiuon多了一个u,正确应为Solution。

修正方案1:反转一半数字(推荐,无溢出风险且高效)

这种方法通过只反转一半数字来避免溢出,同时减少计算量:

class Solution {
public:
    bool isPalindrome(int x) {
        // 提前排除不可能的情况
        if (x < 0 || (x != 0 && x % 10 == 0)) {
            return false;
        }
        
        int rev = 0;
        // 反转一半数字:当x <= rev时,说明已反转一半
        while (x > rev) {
            rev = rev * 10 + x % 10;
            x /= 10;
        }
        
        // 偶数位:反转后rev等于剩余的x;奇数位:rev去掉中间位后等于x
        return x == rev || x == rev / 10;
    }
};

修正方案2:用更大类型存储反转结果(简单直接)

如果不想改逻辑,可以用long long存储反转值,避免溢出:

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;
        
        long long rev = 0;
        int temp = x;
        while (temp > 0) {
            rev = rev * 10 + temp % 10;
            temp /= 10;
        }
        
        return rev == x;
    }
};

内容的提问来源于stack exchange,提问作者Pratick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:15