java - Java 整数溢出以及为什么是 Integer.MAX_VALUE / 10?
问题描述
这是来自 Leetcode 解决方案的代码。所以我不明白 if 条件,为什么 Integer.MAX_VALUE 必须除以 10 (Interger.MAX_VALUE / 10) ?
谢谢你!
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;
}
}
解决方案
该reverse(int x)
函数反转 的十进制数字x
。例如,如果x = 102
,则返回201
,如果x = -102
,则返回-201
。
当x
计算出 的倒数时,将其存储在rev
. 例如,对于x = 102
,rev
采用连续值2
, 20
, 201
。
在每次迭代中,rev
乘以10
,并添加一个数字。当然,rev
不能大于Integer.MAX_VALUE
( 2147483647
)。因此,在乘以 之前rev
,10
我们检查乘以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
)。
推荐阅读
- html - CSS嵌套网格不适合彼此
- python - 如何在纯python中将不同字谜单词的列表拆分为单独的列表?
- java - BigDecimal 的负比例是什么意思?
- sql - 修复“动态”查询而不向我抛出给定的错误?
- android - 编辑字段文本后隐藏文本输入布局的错误
- c++ - 如何获得需要为此处理程序完成的分配大小?
- r - 我应该如何处理预测包中的错误“monthdays() 中的错误:不是月度或季度数据”?
- python - 如何防止意外分配到空的 NumPy 视图中
- arrays - 有什么有效的方法来识别大数组中的一组 1?
- syntax - 这段代码抛出一个错误,说它在第 11 行缺少分号,但我在第 11 行末尾有一个?