7. 整数反转 - 力扣(LeetCode)

  • 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