Java Integer Addition Subtration Overflow 整数加减溢出

leetCode有道题Reverse Integer,因为int的最大值为2的31次方减一,最小值为-2的31次方。

我一开始的代码将res递归加放在try中,以为溢出会有异常,然而并没有。

因为出传入的参数为int类型,且内存和时间要求都能满足,所以long存放中间结果足够了。leet上有个哥们用了一种更机智的溢出检测(自己去看:D)

我的代码:

public class Solution {
    public int reverse(int x) {
        if(x<=9&&x>=-9||x==0){
            return x;
        }
        boolean nagetive=false;
        int y=x;
        if(x<0){
            y=-x;
            nagetive=true;
        }
        ArrayDeque<Integer> s=new ArrayDeque();
        while(y>0){
            s.add(y%10);
            y/=10;
        }
        long res=0L;
        while(s.size()>=1){
            res+=s.poll()*Math.pow(10,s.size());
        }
        if(res>Integer.MAX_VALUE||res<Integer.MIN_VALUE){
            return 0;
        }
        return nagetive?(int)-res:(int)res;
    }
}

 

java 8中有溢出检测的加方法。

Stack Overflow:https://stackoverflow.com/questions/3001836/how-does-java-handle-integer-underflows-and-overflows-and-how-would-you-check-fo

转载于:https://www.cnblogs.com/chenhuanBlogs/p/7086878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值