题目:
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例:
解法
两种解法:一种是每一次切割末尾数后,判断if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)
其实num == INT_MAX / 10 && tmp > 7
不用判断
原数是int类型数,int最大值和最小值的最高位是2。如果一个原数与int类型数的最大值或最小值的长度相等,那么这个数的最高位数也只能为1或2,那么它对应反数的最后一位也只能为1或2。int最大值的最后一位数为7,1或2肯定小于7;int最小值的最后一位数为-8, -1,-2肯定大于-8。
第二种是:每一次切割后,用tmp将num存起来,再看看num/10
和tmp是否相同。
代码
class Solution {
public:
int myreverse(int x) {
int num = 0;
int tmp = 0;
while (x != 0) {
tmp = x % 10;
if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)) return 0;
if (num < INT_MIN/10 || (num == INT_MIN / 10 && tmp < -8)) return 0;
num *=10;
num += tmp;
x = x/10;
}
return num;
}
int reverse(int x) {
return myreverse(x);
}
};