Leetcode-整数反转
题目链接:https://leetcode.cn/problems/reverse-integer/description/
题目本身没啥好说的,但是在处理整数溢出的时候,需要注意一下
一开始判断溢出是用:
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;
}