题目链接
解法
主体没什么东西,就是一个秦九韶算法循环得解。因为题目不希望我们使用long
来处理int
溢出问题,所以我们非常讲武德的用int
莽了这道题。
这里值得注意的点有两个:
- C++里面的
%
运算被模数为负时,结果相当与被模数取绝对值求的解再加上负号。例如在数学中有-4 % 10 = 6
,而在C++中是-4 % 10 = -4
。 - 如果我们用
int
来处理溢出问题,每次不能够用类似res * 10 + x % 10 > INT_MAX
这样的式子来判断,万一左边真的溢出就直接寄了。所以要移项来求。
代码如下:
class Solution {
public:
int reverse(int x) {
long long res = 0;
while (x) {
if (res > 0 && res > (INT_MAX - x % 10) / 10) return 0;
if (res < 0 && res < (INT_MIN - x % 10) / 10) return 0;
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
};