Skip to content

Latest commit

 

History

History
56 lines (46 loc) · 1.45 KB

颠倒整数.md

File metadata and controls

56 lines (46 loc) · 1.45 KB

初级算法之颠倒整数


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

示例一:
输入:123
输出:321

示例二:
输入:-123
输出:-321

示例三:
输入:120
输出:21

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

Solution:
这个问题其实比较简单,先将int数字转为字符串,再反向计算每位的数值,将每次的计算结果相加。记得边界问题,输入的值一定是在[-2^31, 2^31 − 1]内, 颠倒后的整数就不一定了。因此我使用long long类型存储颠倒后的整数结果,输出是再判断有没有溢出。

class Solution {
public:
    int reverse(int x) {
        long long an = 0;
        bool positive = true;
        if (x < 0) {
            positive = false;
            x = -x;
        }

        string num = to_string(x);
        int len = num.size();

        long long a = 2;
        for (int i = 0; i < 30; i++) {
            a *= 2;
        }

        for (int i = 0; i < len; i++) {
            long long temp = num[len - i - 1] - '0';
            for (int j = 0; j < len - i - 1; j++) {
                temp *= 10;
            }
            an += temp;
        }

        if (an >= a) return 0;
        if (!positive) an = 0 - an;
        return int(an);
    }
};