力扣 T7. 整数反转

题意:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [力扣 T7. 整数反转力扣 T7. 整数反转] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

力扣 T7. 整数反转

由于题目要求不能使用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;
}

力扣 T7. 整数反转

 

上一篇:Python-float 0.1+0.2为什么不等于0.3


下一篇:think-cell产品介绍