7. 反转整数(简单题)

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31,  2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。


这道题说简单也简单,说难也难。简单在这道题很基础,算法是刚学计算机的同学就已经掌握的取余算法,重点就在32位有符号整数上。这一点也困惑我挺久。

详情请见:https://blog.csdn.net/TwT520Ly/article/details/53038345

描述的很清楚,INT_MAX,INT_MIN是包含在limit.h的文件中,而且一些运算也在其中。

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) 
                return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) 
                return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

控制条件:(rev > INT_MAX/10 || ( rev == INT_MAX/10 && pop > 7))  是当所得rev > INT_MAX/10的时候,return 0,因为rev再乘10一定会越界。或者当rev == INT_MAX/10的时候,一旦最后的余数大于 7 或者小于 -8 ,则退出循环。

 

刷 leetcode 还是蛮有趣的,烧死脑细胞。

你可能感兴趣的:(c++写简单的算法,LeetCode)