整数反转

题目描述

来源于 https://leetcode-cn.com/

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解法

这题很容易,但是因为不同的语言中负数取余的行为不同,这里干脆先转换为正数,再做其他处理。

class Solution {
public:
    int reverse(int x) {
        long long n = x;
        long long r = 0;
        n = (x >= 0) ? n : -n;

        while (n) {
            r = r * 10 + n % 10;
            n /= 10;
        }
        r = (x >= 0) ? r : -r;

        if (x > 0 && r > INT_MAX) {
            return 0;
        }
        if (x < 0 && r < INT_MIN) {
            return 0;
        }
        return r;
    }
};