class Solution {
public:
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
int reverse(int x) {
int rpc = 0;
while(x != 0){
if(rpc > INT_MAX/10 || (rpc == INT_MAX/10 && x%10 > 7))
return 0;
if(rpc < INT_MIN/10 || (rpc == INT_MIN/10 && x%10 < -8))
return 0;
rpc = rpc*10 + x%10;
x = x/10;
}
return rpc;
}
};
反转很多人都会,这道题的最主要的问题是关于溢出的问题,如何判断这个反转之后的数字是否溢出才是更重要的。首先int类型用十进制来表示范围就是【-2147483648,2147483647】,所以我的判断方法是:如果一个int类型的正数值已经大于“INT_MAX / 10”,或者它等于“INT_MAX / 10”但是其下一个将要相加的数字大于了7(因为IN_MAX=2147483647),那就说明它溢出了。(负数也是同理)