LeetCode 7 Reverse Iteger

62 阅读1分钟

题目描述
在这里插入图片描述

给定一个32位的整数,将其反转为另一个整数。想法是这样的:不断的取出最后一位的数,将其添加到结果中,直到输入的数为零。但是在反转后要注意结果可能会溢出。我们知道32bit整数的取值范围为-2^32 ~ 2^32 - 1,那么我们就需要判断中间的结果是否溢出,如果中间某一步已经发生了溢出,就直接结束。

官方给出的溢出的判断原则为:
在这里插入图片描述

AC代码:

#include <iostream>
#include <vector>

using namespace std;

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;
    }

    int reverse2(int x){
        int res = 0;
        //递归的进行求解
        while(x != 0){
            //先将存储结果的值*10,再将取得的x的最后一位加上去
            int pop = x % 10;
            res = res * 10 + pop;
            //x去掉最后一位,继续求解
            x /= 10;
        }
        //最后判断得到的结果是否在Integer的范围之内,如果越界返回0,否则返回结果
        return (res > INT_MAX || res < INT_MIN) ? 0 : res;

    }
};

int main()
{
    int num = 120;
    Solution s;
    cout<<s.reverse(num)<<endl;
    cout<<s.reverse2(num)<<endl;
    return 0;
}