关于颠倒整数溢出

解决方式:(32位系统)

    设64位int变量sum:int64_t sum;
 1、求出颠倒整数sum后,通过INT32_MAX和INT32_MIN来判断:
            (sum > INT32_MAX || sum < INT32_MIN) ? 0 : sum;
   
 2、 或是直接与 -2147483648~2147483647比较

附:
问题: 给定一个范围为 32 位 int 的整数,将其颠倒。
解答:(最优解法)
static int x = []() { 
    std::ios::sync_with_stdio(false); 
    cin.tie(NULL);  
    return 0; 
}();
class Solution {
public:
    int reverse(int x) {
        int symbol=1;
        if(x>-10 && x<10)
            return x;
        
        //转换成为正数
        if(x<=-10)
        {
            x=-x; symbol=-1;
        }
        
        /*去掉后导0
        while(x%10==0)
            x/=10;
        */
        
        int64_t a=0;
        while(x)
        {
            a=a*10+x%10;
            x/=10;     
        }
        
        a=a*symbol;

        return (a > INT32_MAX || a < INT32_MIN)?0:a;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值