整数逆置

这篇博客介绍了一道关于整数逆置的题目,重点在于处理整数的范围(如int的-2^31~2^31-1)和溢出问题。博主采用将负数转为正数进行处理的方法,通过一个循环将每个数字存入数组,然后逆序组合回原数。代码中还包含了防止溢出的检查,并在负数情况下进行适当调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道整数转换的题目,这里需要掌握int的范围,int是32bit带符号,因此是-2^31~2^31-1,另外还查了一下整形的最大范围unsigned long long, 0~2^64-1,也即20位10进制数

10进制整数是10位,因此用10digit足以

此外还要处理逆置后首位为0,其实对于一般情况可以拿过来处理了,

算法比较简单,我把负数都转为整数处理,最后再转回去,这样除的时候不会那么纠结,而且这样方便

附上代码:

int reverse(int x) {
        int digiti=9;//max 2^31-1, 10 digit most
        int digit[10];
        memset(digit,0,10*sizeof(int));
        bool isnegative=false;//transform negative to positve, process together
        if(x<0)
        {
            x=abs(x);
            isnegative=true;
        }
        
        while(x>0)//get each digit into array
        {
            digit[digiti]=x/(int)pow(double(10),digiti);
            x-=digit[digiti]*(int)pow(double(10),digiti);
			digiti--;
        }
        
        int reversex=0;
        
        int firstnonzeroi=9;//find lowest digit index
        while(firstnonzeroi>=0&&digit[firstnonzeroi]==0)
            firstnonzeroi--;
        if(firstnonzeroi<0)//all zero
            return 0;
        
        int countxi=firstnonzeroi,weighti=0;//get reversedx value
        while(countxi>=0)
        {
            reversex+=digit[countxi]*pow(10.0,weighti);
            weighti++;
            countxi--;
        }
        
        if(reversex>pow(2.0,31)-1) cout<<"reversed number overflow"<<endl;
        if(isnegative)
            reversex-=2*reversex;
        return reversex;
    }

这道题目其实小心处理,没太大难度,关键是还有溢出,其实题目对于溢出的也不需要处理,也即case里是没有溢出的,或者即使有,到判题时也skip掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值