算法 7. 反转数字

LeetCode https://leetcode.cn/problems/reverse-integer/

题目描述

给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。
如果反转后整数超过32位的有符号整数的范围−2^31, 2^31−1就返回 0。
假设环境不允许存储64位整数(有符号或无符号)。

思路

因为只能使用int, 所以需要提前检查反转后的数字有没有超过32位
int的范围是-2147483648——2147483647
通过循环取模的方式取出数字的每一位, 因为要提前一位检查, 所以实际是检查有没有超过214748364

代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define INT_LIMIT 214748364
class Solution {
public:
int reverse(int x) {
int result = 0;
while (x != 0) {
int tmp = x % 10;
if (result > INT_LIMIT || (result == INT_LIMIT && tmp > 7) )
return 0;
if (result < -INT_LIMIT || result == -INT_LIMIT && tmp < -8)
return 0;
result = result * 10 + tmp;
x /= 10;
}
return result;
}
};