美文网首页
7、Reverse Integer

7、Reverse Integer

作者: liuzhifeng | 来源:发表于2017-10-13 20:44 被阅读0次

    题设

    Reverse digits of an integer.
    
    Example1: x = 123, return 321
    Example2: x = -123, return -321
    

    要点

    • 32位补码,-2147483648---2147483647,正转负注意判断溢出
    • 转换过程中,也要注意溢出

    思路比较简单,首先把负数转化为正数处理,假设转化为正数后为x。
    但是!这里要注意,32位整数的范围是-2147483648---2147483647,所以在取反前要判断负数是不是-2147483648,是的话肯定会溢出,返回0!
    转化为正数后,有:result = (result + x % 10) * 10,x = x / 10。result初始为0。循环到x / 10<10,再加上最后的个位数x即可。
    那么如何判断溢出呢?在更新result之前,我们可以记录一个lastResult = result + x % 10。这样,如果更新完后的result / 10 != lastResult,则发生了溢出。即:

    lastResult = result + x % 10;
    result = (result + x % 10 ) * 10;
    if(lastResult != result / 10)
        return 0;
    
        public static int reverse(int x){
    
            if(x == -2147483648) // 32位整数范围是-2147483648---2147483647,所以如果输入的是-2147483648,一取反就溢出了
                return 0;
    
            int flag = 0; // 是否为负数
            int value = x;
            if(x < 0){
                flag = 1;
                value = -value; // 负数转化为正数处理
            }
            int result = 0;
            int lastResult = 0; //result乘上10后再除以10,判断是否和之前相等。如果不相等则溢出了
            while(value >= 10){
                int tail = value % 10;
                lastResult = result + tail;
                result = (result + tail) * 10;
                if(result / 10 != lastResult) // 溢出
                    return 0;
                value /= 10;
            }
    
            if(flag == 0)
                return result + value;
            else
                return -(result + value);
        }
    

    相关文章

      网友评论

          本文标题:7、Reverse Integer

          本文链接:https://www.haomeiwen.com/subject/qddtuxtx.html