首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java溢出,为什么是Integer.MAX_VALUE / 10?

Java溢出,为什么是Integer.MAX_VALUE / 10?
EN

Stack Overflow用户
提问于 2019-06-06 05:52:30
回答 2查看 1.3K关注 0票数 1

这是来自Leetcode解决方案的代码。所以我不理解if条件,为什么Integer.MAX_VALUE必须被10整除(Interger.MAX_VALUE / 10)?

谢谢!

代码语言:javascript
复制
class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-06-06 07:41:57

reverse(int x)函数用于反转x的十进制数字。例如,如果为x = 102,则返回201;如果为x = -102,则返回-201

当计算出x的倒数时,它存储在rev中。例如,对于x = 102rev采用连续的值220201

在每次迭代中,rev10相乘,并向其添加一个数字。当然,rev不能大于Integer.MAX_VALUE (2147483647)。因此,在将rev10相乘之前,我们检查将其与10相乘并添加pop是否会使其大于Integer.MAX_VALUE

我们首先检查rev是否大于Integer.MAX_VALUE / 10 (214748364)。如果它大于,则反向整数不存在。如果不是,则rev小于或等于Integer.MAX_VALUE / 10。如果它小于Integer.MAX_VALUE / 10,那么即使我们将它乘以10,我们也可以向它添加任何数字(pop),并且我们不会超过Integer.MAX_VALUE。但是,如果它等于Integer.MAX_VALUE / 10,那么我们必须确保pop不是> 7 (2147483647 - 214748364 * 10),因为否则我们将超过Integer.MAX_VALUE

同样的道理也适用于Integer.MIN_VALUE (2147483648)。

票数 2
EN

Stack Overflow用户

发布于 2019-06-06 06:03:10

这是非常直接的。添加它的主要目的是为了不会遇到整数内存越界异常。

代码语言:javascript
复制
Line 1:   rev == Integer.MAX_VALUE / 10
Line 2:  rev = rev * 10 + pop;

让我们假设上面的情况对于某些值是真的。Line 1 means that 10*rev = Integer.MAX_VALUE.第2行: rev是一个整数。如果按照第1行,我们遇到了rev = Integer.MAX_VALUE,的情况,如果我们在它上面添加一个pop,我们将遇到整数内存越界异常。为了避免这种情况,添加了第1行。确保执行第1行的示例测试用例是"Pass Integer.MAX_VALUE" as an input to reverse() function.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56468515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档