Fork me on GitHub

Reverse interger

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。个人推荐解法一。

您的赞赏是对我最大的支持,谢谢!