第一个能反转数字,但是在检测整数上限失败了。
改成long可以解决,但题目不允许。
class Solution {
public:
int reverse(int x) {
if(x==-2147483648){
//这是尝试限制整数超过最大值,但只能限制一部分
return 0;
}
if(x>=-9&&x<=9){
return x;
}
int j = 0;
if(x<0){
j = 1;
x*=-1;
}
int mod = 1;
while(mod*10<=x){
//试探x有几位
mod*=10;
//mod是10000...,好判断的
if(mod>INT_MAX/10){
//这是尝试限制整数超过最大值,但只能限制一部分
break;
}
}
cout<<"mod = "<<mod<<endl;
int result=0;
int temp = x;
while(mod!=0){
//temp%10是取出temp最后一位
//乘于mod放到合适的位置
if((mod/10)*(temp%10)>INT_MAX/10||result>INT_MAX/10){
//这是尝试限制整数超过最大值,但只能限制一部分
return 0;
}
result += temp%10*mod;
cout<<"result = "<<result<<" Max = "<<INT_MAX/10<<endl;
mod = mod/10;
temp = temp/10;
cout<<"result2 = "<<result<<endl;
}
if(j==1){
result*=-1;
}
return result;
}
};
//头和尾的数字都好拿,重要的是中间的不好搞