这道题也偏容易, 但要注意题目提示的那几种特殊情况. 这体现了思维是否严谨.
整数反转, 思路很简单, 原数的个位 ==> 结果的最高位. 原数的最高位 ==> 结果的个位. 那么循环一下吧?
while (x)
{
res = res * 10 + x % 10; // 加号前面是先取得的值保持最高位, 后面则是取得原数的个位.
x /= 10; // 裁剪原数, 确保能够从低位到高位的值, 能够被依次取得.
}这就是这道题的核心了.
特殊情况:
long, 那你一个 int
怎么反转都不会超出 long 的范围了吧? 然后判断
res 和 INT_MAX的关系就可以了.缩减一下上面的循环. 答案有了.
#include <climits>
class Solution {
public:
int reverse(int x) {
long res = 0;
do {
res = res*10 + x%10;
} while (x /= 10);
return res>INT_MAX ? 0 : res;
}
};