难度 :简单
题目地址:整数反转
思路: 每次除以10 更新x,对结果每次乘以10加上更新后x的个位数
错误答案:
class Solution {
public:
int reverse(int x) {
int res = 0;
bool isbigThanzero = true;
if (x <= 0) {
x *= -1;
isbigThanzero = false;
}
while (x) {
res = res * 10 + x % 10;
x /= 10;
}
if (!isbigThanzero) res *= -1;
return res;
}
};
出现的问题: “Line 7: Char 15: runtime error: signed integer overflow: -2147483648 * -1 cannot be represented in type ‘int’ (solution.cpp)”
解决:将整型换成长整型,注意边界,顺便优化了一下
正确答案:
class Solution {
public:
int reverse(int x) {
long res = 0;
while (x) {
res = res * 10 + x % 10;
x /= 10;
}
return res > INT_MAX || res < INT_MIN ? 0 : res;
}
};