Leetcode7-整数反转

题目链接:7. 整数反转 - 力扣(LeetCode)

题目本身没啥好说的,但是在处理整数溢出的时候,需要注意一下

一开始判断溢出是用:

if (res*10 > INT_MAX || (res*10 + temp) > INT_MAX)

然而这是没有意义的,因为如果乘法已经执行,并且结果溢出了,那么 res * 10 的计算结果将是一个未定义的行为。正确的方法应该为:

if (res > INT_MAX/10 || (res == INT_MAX/10 && temp > 7))

此外使用INT_MAX需进入的是<limits.h>

完整代码

int reverse(int x) {
   int res = 0;
   int flag = 0;
   int temp;
   if (x == -2147483648) x = 2147483647;
   if (x < 0) {
        x = - x;
        flag = 1;
   }
   while(x > 0) {
        temp = x % 10;
        x /= 10;
        if (res > INT_MAX/10 || (res == INT_MAX/10 && temp > 7)){
            return 0;
        }
        res = res*10 + temp;
   }
   if (flag) res = - res;
   return res;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

映秀小子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值