编程练习:整数翻转|难度:简单

将给出的整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321
你有思考过下面的这些问题么?
如果整数的最后一位是0,那么输出应该是什么?比如10,100
你注意到翻转后的整数可能溢出吗?假设输入是32位整数,则将翻转10000000003就会溢出,你该怎么处理这样的样例?抛出异常?这样做很好,但是如果不允许抛出异常呢?这样的话你必须重新设计函数(比如添加一个额外的参数)。

主要是要判断是否溢出
但是我不知道界在哪里 咋整呢
那我就判断一下反转之后算式里用到的某个变量还是不是曾经的自己不就好了嘛

另外反转的算法也可以记忆一下
res = res*10+x%10

解法一如下:

class Solution {
public:
    int reverse(int x) {
        int r1 = 0;
        int r2 = 0;
        while(x!=0){
            r2 = r1;
            r1 = r2*10+x%10;
            if((r1-x%10)/10!=r2) return 0;
            x = x/10;
             
        }
        return r1;
    }
};

但是这有一个问题就是负数和过大两种情况没有考虑,很奇怪,这段代码在牛客上能通过,但是LeetCode不行,于是改进了一下

int reverse(int x){
        long r = 0;
    while (x != 0) {
        r = 10*r + x%10;
        x = x/10;
    }
    if (r > pow(2, 31)-1 || r < -pow(2, 31)) 
        return 0;
    return r;
}
    原文作者:希哈科技
    原文地址: https://blog.csdn.net/qq_19004627/article/details/109244620
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞