奋战leecode之整数反转(小白专场)

Hello 大家好,今天为大家带来leetcode第7道题——整数反转
作为刚刚开始刷leetcode的小白,笔者一定会用最“白话文”的方式来讲解题目(ps:高深的…我也理解不了,呜呜呜)
好了,话不多说,进入正题吧!!


题目如下:
在这里插入图片描述
本文有两种做法,分别是字符串处理和数学处理,因为笔者刚刚接触c++语言不久,暂时还不太懂c++的一些库函数,所以在这里笔者主要讲解数学处理的方法。


相信大家看到这道题,心中都会有很多思路,不就是整数反转嘛,简单!倒序输出就可以了呀,,,,,
笔者一开始就是这样想的,也是这样入坑的。。。。。

首先可以肯定的是,这样想没错,但是忽略了本题最大的陷阱,我们输出的数是有范围的!!!!!
在这里插入图片描述

在这里需要补充一个知识点,-2的31次方是- 2147483648,2的31次方-1是2147483647,如果知道这两个,这道题基本上成功一半了。

首先我们需要定义一个整型变量y用来存储整数反转后的数值,在while循环中,定义一个变量k来存储x%10的值。
由于程序中有y=y10+x%10;
注意这里,不能直接将y的值与- 2147483648和2147483647进行比较,因为假如y的值是2147483645,这时候y是符合我们程序中设置的范围的,但是等到下一步y
10之后,y就会溢出,因此只能将y与214748364进行比较。

对于正界限2147483647:
如果y>214748364的话,那么经过y=y10+x%10,y的值会直接溢出,就返回0
如果y=214748364的话,如果k>7,那么经过y=y
10+x%10,y的值依然会大于2147483647,也会产生溢出,返回0。

同理可得,对于负界限-2147483648:
如果y<-214748364的话,那么经过y=y10+x%10,y的值会直接溢出,就返回0
如果y=-214748364的话,如果k<-8,那么经过y=y
10+x%10,y的值依然会小于-2147483648,也会产生溢出,返回0。

好了,本题的精髓部分,笔者应该已经讲述的比较完备了,如果有不理解的地方,欢迎在评论区与笔者讨论!!

代码:


class Solution {
public:
    int reverse(int x) {
        int y=0,k;
        while(x!=0)
        {
            k=x%10;
            if(y > 214748364||(y == 214748364&&k>7))
                return 0;
            if(y < -214748364||(y == -214748364&&k<-8))
                return 0;
            y=y*10+x%10;
            x=x/10;
        }
        return y;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值