力扣 T7. 整数反转
作者:互联网
题意:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [,] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
由于题目要求不能使用64位整数,不能使用64位整数判断反转后的数字是否在题目要求范围之内。因此,需要使用整型数组存储反转后的整数,再比较反转后是否超出范围。
int Reverse(int x){
//2147483648
int p,t=0,ans=0; //p标志正负,t代表位数
int num[15]={}; //num数组存放反转后的整数
int nump[11]={2,1,4,7,4,8,3,6,4,7};//2的31次方-1,用于比较正数
int numn[11]={2,1,4,7,4,8,3,6,4,8};//2的31次方,用于比较负数
//先判断是正数还是负数,统一转化成正数处理
if(x>0)p=1;
else if(x==-2147483648||x==0)return 0;//特殊处理0和-2的31次方
else p=0,x=-1*x;
while(x>0)
num[t]=x%10,x/=10,t++;
if(t<10) //位数小于10位,则必然小于2的31次方=2147483648
{ //直接反转
for(int i=0;i<t;i++)
ans=num[i]+ans*10;
if(p==0)ans=-1*ans;
}
else //位数大于10位,需要判断。与左右的两端点逐位比较
{
if(p==1) //正数,与nump逐位比较
for(int i=0;i<t;i++)
{
if(num[i]<nump[i])break;
if(num[i]>nump[i])return 0;
}
else //负数,与numn逐位比较
for(int i=0;i<t;i++)
{
if(num[i]<numn[i])break;
if(num[i]>numn[i])return 0;
}
for(int i=0;i<t;i++)
ans=ans*10+num[i];
if(p==0)ans*=-1;
}
return ans;
}
标签:return,int,T7,整数,else,力扣,64,反转 来源: https://blog.csdn.net/coconutmilktea/article/details/122628345