整数的反转

该博客介绍了如何反转一个32位有符号整数的方法,通过取模运算获取每一位数字,并在反转过程中检查是否超出32位整数范围,若超出则返回0。

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

反转整数

        题目:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围(-2147483648~2147483647),就返回0。

        实例

        输入:x = 123
        输出:321

        输入:x = -123
        输出:-321

        输入:x = 120
        输出:21

        思路:我们举一个例子来说明思路吧,比如4821这个数字,我们该如何获得每一位上的数字呢?将整个整数拆分开?显然不行,对于整数,没有像字符串可以调用charAt()方法去拆分。那我们有没有其他办法呢? 我们会想到 /和%,当一个数 和 10 做取余操作时,每次得到的数字就是当前数字的最后一位。

        例:

        4821 % 10 = 1

        482 %10 = 2

         48 % 10 = 8

         4 %10 = 4

        这样,我们就可以获取到每一位上的数字了,但是 从 4821 该如何变为 482 呢? 别忘了我们还有 / 运算符。

        但是,有一个问题在于,有些数字,在没有反转前,它是属于32位整型的范围内的,但是反转后,就不属于了,此时应该返回0,那么如何判断一个数反转后是不是还是属于32位整型范围呢?我们可以在每次反转完后,进行判断。

        代码示例

 public int reverse(int x) {
        int res = 0;
        int tmp = 0;
        while(x!=0){

            // 获取最后一位数字
            tmp = x%10;

            // 反转后判断
            // res代表将每一位上的数字通过计算得出的 反转后的数据。
            // tmp > 7 表示 当最后一次获取到未反转前数字的最后一位数时,如果大于7,那么反转后的数字为: 2147483648或2147483649.这显然超过了范围。
            if(res > 214748364 || (res == 214748364 && tmp > 7)){
                return 0;
            }

            if(res < -214748364 || (res == -214748364 && tmp < -8)){
                return 0;
            }

            res = res*10 + tmp;

            x/=10;
        }
        return res;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值