题目
题解
这道题思路很简单,但关键在于题目要求的数据不能超出int,意味着在反转过程中要对数据进行判断,且不能利用超出int的值作为对比。
int 范围 为 -2 ^ 31 ---- 2 ^ 31-1 ,即:-2147483648 — 2147483647
如果没有题目的限制,则可以用一个大于2147483647或者小于-2147483648的值来作为对比,但现在有限制,需要提前比较:
大于0 的数,要和214748364比较,如果小于,则后面接数肯定小于2147483647,;若等于,则看后面接的数是否小于7;若大于,那肯定溢出,return 0。
小于0,和-214748364比较,如果大于,则后面接数肯定不会溢出;若等于,则看后面接的数是否小于-8;若小于,则肯定溢出,return 0。
int reverse(int x){
if(x==0)return 0;
int ans=0;
int temp=0;
while(x)
{
temp=x%10;
if(ans>214748364 || ans==214748364&&temp>7)
{
return 0;
}
if(ans<-214748364 || ans==-214748364&&temp<-8)
{
return 0;
}
ans*=10;
ans+=temp;
x=x/10;
}
return ans;
}
对溢出数的判断是这道题的重点。