整数反转进阶和复习

本文介绍了如何在不使用`long`的情况下,通过补码原理和边界条件处理反转整数问题,包括符号判断、边界值检测和特殊负数处理。题目链接:https://leetcode.cn/problems/reverse-integer/。
摘要由CSDN通过智能技术生成
记录一道比较简单的题目,整数反转
题目意思:将一个int类型的数字反转,符号不变

普通

思路:获得符号,将提取出每一位数字,接到答案上,最后输出即可。直接用大类型存储,同时要判断答案的数字是否超过int类型,如果超过返回0即可。

进阶:不能用long存储。

思路
依旧一位一位取数字拼接到答案上,
但是当答案大于INT_MAX的1/10的时候要注意不能再拼接了。
如果答案等于INT_MAX的1/10,
那么判断最后一位拼接的数字是否大于7(INT_MAX的最后一位就是7),
如果大于,也不能拼接了。
最后注意,int负数范围比正数大一位,需要特判。

复习知识点: a - b是用补码实现的,相当于 a + ~b + 1。

代码:

class Solution {
public:
    int reverse(int x) {
        int maxx = INT_MAX ; //个位是7
        int boundary = maxx / 10;
        int res = 0;
        int flag = 1;
        if(x == INT_MIN) return 0;
        if(x < 0) flag = -1, x = -1 * x;
        // res = 2143847412;
        while(x != 0)
        {
            if(res > boundary) return 0;
            else if (res == boundary)
            {
                if(x % 10 > 7) return 0; 
            }
                        res = res * 10;
            res = res + (x % 10);
5            x = x / 10;
        }
        return res * flag ;
    }
};

附上题目连接:
https://leetcode.cn/problems/reverse-integer/submissions/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值