通过int num = x - x / 10 * 10
获取x当前最后位。
注意INT_MAX/INT_MIN两个边界
通过比较倒数第二次数字与INT_MAX/INT_MIN大小关系,判断是否越界。
以正数为例:
在最后一次乘10之前,若当前数已经大于INT_MAX/10则越界。
,若当前数等于INT_MAX/10,则比较最后一位大小(INT_MAX末位为7),
若最后一位大于7则越界。
class Solution {
public:
int reverse(int x) {
int result = 0;
while (x != 0)
{
int num = x - x / 10 * 10;
x /= 10;
if (result > INT_MAX / 10 || (result == INT_MAX / 10 && num > 7)) return 0;
if (result < INT_MIN / 10 || (result == INT_MIN / 10 && num < -8)) return 0;
result = result * 10 + num;
}
return result;
}
};