Reverse interger

将一个整数反转,需要考虑溢出。
leetcode 原题链接:https://leetcode.com/problems/reverse-integer/
example: x=123,return 321
example: x=-123,return -321
此题难度easy,不过需要考虑的是反转之后溢出情况。int32的范围-2147483648,2147483647。直接贴代码

1
2
3
4
5
6
7
8
9
10
11
int reverse(int x)
{
    int res = 0;
    while (x != 0) {
        //判断是否溢出
        if (abs(res) > INT_MAX/10)
            return 0;
        res = res *10 + x % 10;
        x /= 10;
    }
}

当然也可以定义一个long long类型的变量,如下

1
2
3
4
5
6
7
8
9
10
11
//解法2
int reverse(int x)
{
    long long res=0;
    while (x != 0) {
        res = res *10 + x % 10;
        x /= 10;
    }
    //判断溢出
    return (res>INT_MAX||res<INT_MIN)?0:res;
}

解法一,是直接判断是否大于INT_MAX/10(即214748364),当res>214748364时,必定溢出。因为x的第一位只能是1或者2,所以再执行res=res*10+x/10就会溢出。
解法二,直接定义了一个long long类型,最后判断是否大于INT_MAX或者小于INT_MIN。个人推荐解法一。

留下评论