7、Reverse Integer

2017-10-13  本文已影响0人  liuzhifeng

题设

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

要点

思路比较简单,首先把负数转化为正数处理,假设转化为正数后为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);
    }
上一篇下一篇

猜你喜欢

热点阅读