题目描述
思路
主要的问题还是判断溢出。
方法一(仅限java):可以直接存一个临时的翻转结果,如果这个翻转结果除以10不等于上一个结果,说明有溢出。因为java溢出不会报错,C++计算结果的时候溢出直接报错。
class Solution {
public int reverse(int x) {
int res = 0;
while (x != 0) {
int tmp = res * 10 + x % 10;
if (tmp / 10 != res) { // 溢出!!!
return 0;
}
res = tmp;
x /= 10;
}
return res;
}
}
方法2:
不等式
等价于
代码
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
};