力扣7. 整数反转

题目:

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

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

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

示例:

解法

两种解法:一种是每一次切割末尾数后,判断if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)

其实num == INT_MAX / 10 && tmp > 7不用判断

原数是int类型数,int最大值和最小值的最高位是2。如果一个原数与int类型数的最大值或最小值的长度相等,那么这个数的最高位数也只能为1或2,那么它对应反数的最后一位也只能为1或2。int最大值的最后一位数为7,1或2肯定小于7;int最小值的最后一位数为-8, -1,-2肯定大于-8。

第二种是:每一次切割后,用tmp将num存起来,再看看num/10 和tmp是否相同。

代码

class Solution {
public:
    int myreverse(int x) {
        int num = 0;
        int tmp = 0;
        while (x != 0) {               
            tmp = x % 10;      
            if (num > INT_MAX/10 || (num == INT_MAX / 10 && tmp > 7)) return 0;
            if (num < INT_MIN/10 || (num == INT_MIN / 10 && tmp < -8)) return 0;
            num *=10;    
            num += tmp;
            x = x/10;               
        }
        return num;
    }
    int reverse(int x) {      
       return myreverse(x); 
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值