跳转至

7. 整数反转

难度:简单

题目

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

Reference

题解

基本思路: 每一次从右侧提取出最后一位加到结果的右侧。注意负数-2147483648在 32 位有符号整数环境下不能取负,将中间变量声明为long即可解决。

int reverse(int x){
    long ret = 0, testcase = x;
    testcase = testcase > 0 ? testcase : -testcase;
    while(testcase)
    {
        ret *= 10;
        ret += testcase % 10;
        testcase /= 10;
    }
    return ((ret >> 31) ? 0 : ret) * (x > 0 ? 1 : -1);
}

评论