- INT_MAX INT_MIN宏:常量
INT_MAX <climits> 头文件定义的一个宏,是一个常量,
表示当前编译环境中 int 类型可以存储的最大整数值
INT_MAX 的值是 2147483647。这个值是 2^31 - 1
即int 类型在32位系统中的最大正整数值。
- cpp中取模运算%:负数抛过符号,得到的正数取模,得到的结果加上负号即为最终结果
- 检查溢出:根据 10*r+x%10>max 推导(分正、负数情况)
- 最朴素的方法实现翻转
class Solution {
public:
int reverse(int x) {
int r = 0;// 初始化变量 r,用来存储反转后的结果
while(x){// 当 x 非零时执行循环,即反转 x 的每一位数字
//检查正数时的溢出,若溢出返回0
if(r>0 && r > (INT_MAX - x % 10) / 10) return 0;
// 检查负数情况下的溢出
if(r<0 && r < (INT_MIN - x % 10) / 10) return 0;
r = r*10 + x%10; // 将 r 左移一位,加上 x 的最后一位数字
x /= 10; // 将 x 右移一位,去掉最后一位数字
}
//if(r > INT_MAX) return 0;
//if(r < INT_MAX) return 0;
return r;//返回反转后的结果r
}
};
注意:每次得到的结果要在INT_MAX和INT_MIN之间,即:
INT_MIN < r*10+x%10 < INT_MAX
以此推导出正数、负数时 r 的取值范围(if判断条件),进而超过范围返回0