- 思路
要反转数字:
只要能拿到这个整数的末尾数字就可以了。
以12345为例,先拿到5,再拿到4,之后是3,2,1,我们按这样的顺序就可以反向拼接处一个数字了,也就能达到 反转 的效果。
- 细节
如何才会使整形溢出呢?
32位最大整形是-214748368 ~ 214748367
由于这里的判断方式是ret = ret10 + lastnum
所以快溢出的方式应该是:2147483610再加上4,这是相等,再大的话就会溢出
所以说,判断它没有溢出的条件应该就是,在21474836加上最后一个个位数数之前
此时如果ret = 21474836,就无需继续判断了,肯定没有溢出。
因为对于x本身来说,除非x的位数与214748367不一样,如果一样的话,它的第一位只能是2,也就不存在lastnum>7的情况,负数也一样。所以判断条件只需要直到是否小于21474836即可
class Solution {
public:
int reverse(int x) {
//先把每位数从后面取出来
//再从头拼接成一个新的数
//不管正负数,最后都是x = 0
int ret = 0;//新拼接的数
while(x != 0){
int lastnum = x%10;
//无需后续判断
//if(ret > 214748364 || (ret == 214748364 && lastnum > 7)){
// return 0;
//}
//if(ret < -214748364 || (ret == -214748364 && lastnum < -8)){
// return 0;
//}
if(ret > 214748364){
return 0;
}
if(ret < -214748364){
return 0;
}
ret = ret*10 + lastnum;
x /= 10;
}
return ret;
}
};
运行结果: