数据结构与算法设计:整数反转

1.题目

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

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

2.示例

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

提示:

-2^31 <= x <= 2^31 - 1

3.分析

用%依次得到每一位数。同时,为了满足旋转过来的数字不超过int类型的范围,我们可以使用pow(2,31)/10函数得到一个Int型数字。之所以要/10是因为Int类型的数字是无法保存[-2^31 ,  2^31 - 1]之外的数字,因此缩小10倍再进行比较。具体操作,可以看下面的代码。

4.代码

int reverse(int x){
     int result=0;//保存最后结果
     int just=pow(2,31)/10;//限制范围的一个标志值
    while(x!=0){//循环条件式x!=0,若x直接等于0则result=0;若x!=0就进行循环,直到x==0,这时result就已经是旋转后的数字了。
       int temp= x%10;//得到每一位的值
       if((result<(-1)*just)||(result>just))return 0;//保证result要在[-2^31,2^31-1]内,否则直接返回0
       result=(result*10+temp);//每一轮循环都要进行一次运算,保证最后得到result是正确的
       x/=10;//得到一个temp后,x就要缩小10倍
    }
    return result;//返回最终结果
}

5.总结

此题并不困难。若有难度,主要集中在如何保证旋转后的值在[-2^31,2^31-1]内,因为如果处理不好,就很容易使result超过int类型值的范围,而得到错误结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值