题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路
整数反转部分比较简单。主要需要注意的是题中对边界条件的要求,需要判断反转后的结果是否超过了32位有符号整数所能存储的范围。
代码
class Solution {
public:
int reverse(int x) {
int ans = 0, num = 0;
int max = pow(2, 31) - 1;
int min = -pow(2, 31);
while(x != 0) {
num = x % 10;
if(ans > max / 10 || (ans == max / 10) && (num > max % 10))
return 0;
if(ans < min / 10 || (ans == min / 10) && (num < min % 10))
return 0;
ans = ans * 10 + num;
x = x / 10;
}
return ans;
}
};