反向整数leetcode:为什么仅在INT_MAX中添加7或更大的值时才会发生溢出?

时间:2019-04-30 21:22:09

标签: java

我有Leetcode提供的解决方案,而令我感到困惑的部分是,将7(或更低的值)添加到Integer.MAX_VALUE或将-8(或更低的值)添加到Integer.MIN_VALUE不会导致分别上溢或下溢。

我的逻辑是,如果您具有Integer.MAX_VALUE,则加1将导致溢出。并且如果您有Integer.MIN_VALUE,则减1将导致下溢。我对上溢和下溢的理解哪里错了?

recursive_merge_sort

2 个答案:

答案 0 :(得分:3)

是的,通常在Integer.MAX_VALUE上加1会导致溢出,在Integer.MIN_VALUE上减1也会导致溢出。但这不是这里发生的事情。

此代码正在执行10的整数除法,该运算将截断任何小数部分。将Integer.MAX_VALUE2147483647)除以10时,代码预期将乘以10并加下一位。该商为214748364,乘以102147483640,并且可以加7而不会溢出。同样,在负面方面,将Integer.MAX_VALUE-2147483648)除以10得出-214748364,再乘以10得出-2147483640,并可以加上另一个-8溢出。

此代码考虑了Integer值范围的极值的最后一位,并仔细避免了溢出。

答案 1 :(得分:2)

Integer.MAX_VALUE 2147483647

这意味着:Integer.MAX_VALUE/10214748364

您将要做:rev = rev * 10 + pop

因此,如果rev > 214748364,则rev * 10会导致溢出。

或者如果rev == 214748364,则rev * 102147483640,如果rev * 10 + poppop > 7将导致溢出。