【发布时间】:2022-07-30 03:47:48
【问题描述】:
我试图解决 LeetCode 上的 this 问题,您必须使用函数反转整数。约束是,如果反转的数字超出有符号的 32 位整数范围,即 (-2^31) 到 (2^31 - 1),则返回 0。当我将整数用于反转变量时,像这样
class Solution {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
rev = rev * 10 + x % 10;
x /= 10;
}
if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
return 0;
return rev;
}
}
IntelliJ IDEA 表明
Condition 'rev > Integer.MAX_VALUE' is always 'false'
但是,当我使用 long 而不是 int 时,问题得到解决,程序按您预期的方式运行。
class Solution {
public int reverse(int x) {
long rev = 0;
while (x != 0) {
rev = rev * 10 + x % 10;
x /= 10;
}
if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
return 0;
return (int)rev;
}
}
我想知道为什么会这样?
【问题讨论】:
-
因为当
rev是int时,它实际上不能大于Integer.MAX_VALUE。其他条件也是不可能的。因为它是int。这就像要求一个大于最大可能值的值。或比最小可能值少一个值。使用long,其值可能大于最大可能的int值。或小于可能的最小int值。long是 64 位的。
标签: java integer reverse long-integer