C++ 判断回文数 详细版 (超级简洁,很有趣的思路)【原有数字逆转,然后比较两数字是否相同,会有溢出】解决办法

本文探讨了判断整数是否为回文数的两种方法,分析了直接逆转整数可能导致的溢出问题,并提出了一种更高效且避免溢出的解决方案,即仅逆转整数的一半进行比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【思路1】:把原有数字逆转,然后比较两数字是否相同。(不安全)

但是由于int的限制,很可能会发生正向的数字没有溢出,但是反向的数字就溢出的情况

(例如:2147483647,调转过来就溢出了)

Int溢出后会不断减去或者加上4294967296直至整数范围落在-2147483648 ~ 2147483647内,所以如果直接调转过来可能会导致整数数值的变化,从而导致比较的不正确。

【思路2】而是把整数先一位一位存在数组中,然后一位一位比较,但是这样涉及到比较的次数就较多,而且还使用了数组作为辅助内存。

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0|| (x!=0 && x%10==0)) return false;
        int sum=0;
        while(x>sum)
        {
            sum = sum*10+x%10;
            x = x/10;
        }
        return (x==sum)||(x==sum/10);
    }
};

思路就很有价值:没有把整个数翻转过来,而是只翻转了一半(利用条件:x>sum),所以出while循环时的可能性只有两种:1.x与sum同位数,但是sum>=x(原整数是偶数位情况)  2.sum比x高一位(原整数是奇数位情况)

而这也导致了最终判断条件是两个((x==sum)||(x==sum/10)

利用翻转一半的方法,就彻底规避了整数超出范围的情况,非常的机智。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值