题目描述:
思路:范围是,即[-2147483648,2147483647]。直接使用数学方法,先得到原数字的末位pop,然后作为反转数字的首位,但是要防止反转数字的溢出,当res>INT_MAX/10或res<INT_MIN/10的时候,执行res*10+pop时一定会溢出,当res=INT_MAX/10并且pop>7或res=INT_MIN/10并且pop<-8的时候,执行res*10+pop会溢出。
class Solution {
public:
int reverse(int x) {
int res=0;
while(x!=0){
//取出原数字的末位
int pop=x%10;
//更新原数字
x=x/10;
//执行res*10+pop一定会溢出
if(res>INT_MAX/10||res<INT_MIN/10) return 0;
//x为正数时溢出情况
if(res==INT_MAX/10&&pop>7) return 0;
//x为负数时溢出情况
if(res==INT_MIN/10&&pop<-8) return 0;
//得到反转数字
res=res*10+pop;
}
return res;
}
};