[Medium]LeetCode第7题——整数反转

98 阅读1分钟

题目链接

整数反转

解法

主体没什么东西,就是一个秦九韶算法循环得解。因为题目不希望我们使用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;
    }
};