首页 > 解决方案 > 处理反向整数溢出

问题描述

它实际上与问题Reverse Integer leetcode - 如何处理溢出有关,以反转整数的数字,同时在反转整数溢出时返回 0。

所以它应该是:

输入:-123,返回:-321

输入:1500032455,返回:0

我可以反转正常情况下的数字,但不能反转溢出情况,我检查了上面的链接,我的有点笨重..但我想它应该工作相同?有人可以建议吗?

    public int reverse(int x) {

        boolean isPositive = true;
        if (x < 0){
            isPositive = false;
            x = x * -1;
        }

        int length = String.valueOf(x).length();
        int[] digit = new int[length];

        for (int i = 0; i < length; i++){
            digit[i] = x % 10;
            x = x / 10;
        }

        int solution = 0;
        for (int j = 0; j < length; j++){
            solution = solution + digit[length-j-1] * (int) Math.pow(10,j);
        }

        if (solution > Integer.MAX_VALUE){
            return 0;
        }

        return (isPositive == false) ? -solution : solution;        
    }

}

标签: javaintegerreverse

解决方案


我认为有一种更简单的方法可以做到这一点。尝试 :

int reverse(int num)
{
    char[] number = String.valueOf(num > 0 ? num : -num).toCharArray();
    for(int i=0; i< number.length/2;i++)
    {
        char temp = number[i];
        number[i] = number[n-i];
        number[n-i] = temp;
    }
    BigInteger Num = new BigInteger(new String(number));
    if(Num.compair(BigInteger.valueOf(Integer.MAX_INTEGER)) >= 0) return 0; // Or throw an Exception.
    else return Integer.praseInt(new String(number)) * (num >0 ? 1 : -1);
}

您可以使用它来反转大于 Integr.MAX_INTIGER 的数字,只需替换函数的返回类型并更改最后一个 if 语句。


推荐阅读