题目描述

LeetCode刷题 7. 整数反转_int类型溢出

思路

主要的问题还是判断溢出。

方法一(仅限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

LeetCode刷题 7. 整数反转_int类型溢出_02

LeetCode刷题 7. 整数反转_算法_03

不等式

LeetCode刷题 7. 整数反转_算法_04

等价于

LeetCode刷题 7. 整数反转_7. 整数反转_05

LeetCode刷题 7. 整数反转_整数反转_06

代码

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;
}
};