整数反转

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

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

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

  • 示例 1:

    输入:x = 123

    输出:321

  • 示例 2:

    输入:x = -123

    输出:-321

  • 示例 3:

    输入:x = 120

    输出:21

  • 示例 4:

    输入:x = 0

    输出:0

  • 提示:

    -231 <= x <= 231 - 1

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;

class Solution {
public:
int reverse(int x) {
if (x == 0) {
return 0;
}
int flag = (x < 0) ? -1 : 1;
unsigned long long int reverValue = 0;
x = abs(x);
do {
reverValue = reverValue * 10 + (x % 10);
if (reverValue != 0 && ((flag > 0 && reverValue > INT_MAX) || (flag < 0 && flag * reverValue < INT_MIN))) {
return 0;
}
x = x / 10;
} while (x != 0);

return reverValue * flag;
}
};

int main() {
std::cout << Solution().reverse(123) << std::endl;
std::cout << Solution().reverse(-123) << std::endl;
std::cout << Solution().reverse(120) << std::endl;
std::cout << Solution().reverse(0) << std::endl;
std::cout << Solution().reverse(1534236469) << std::endl;
std::cout << Solution().reverse(-2147483412) << std::endl;
std::cout << Solution().reverse(1463847412) << std::endl;
std::cout << Solution().reverse(-1563847412) << std::endl;
std::cout << Solution().reverse(-10) << std::endl;
return 0;
}