(力扣) 7. 整数反转

题目描述

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [231,2311][−2^{31}, 2^{31} − 1],就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

1
2
输入:x = 123
输出:321

示例 2:

1
2
输入:x = -123
输出:-321

示例 3:

1
2
输入:x = 120
输出:21

示例 4:

1
2
输入:x = 0
输出:0

提示:

  • 231<=x<=2311-2^{31} <= x <= 2^{31} - 1

解题思路

2311=21474836472^{31} - 1=2147483647

231=2147483648-2^{31}=-2147483648

考虑到 int 类型的数据进行反转后可能超过 int 类型最大范围,应对反转后结果到达 9 位数时进行判断。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
int reverse(int x) {
int ans = 0;
int t = 0;
while(x != 0)
{
t = x % 10;
if(ans>214748364||(ans==214748364&&t>7))
{
return 0;
}
else if(ans<-214748364||(ans==-214748364&&t>7))
{
return 0;
}
x /= 10;
ans = ans * 10 + t;
}
return ans;
}
};