[英]Reverse Integer leetcode: Why does overflow occur only if 7 or greater is added to INT_MAX?
[英]LeetCode 7: Reverse Integer | why does it work with a long but not with an int?
我試圖在 LeetCode 上解決這個問題,你必須使用 function 來反轉 integer。 約束是,如果反轉的數字超出有符號的 32 位 integer 范圍,即 (-2^31) 到 (2^31 - 1),那么您返回 0。當我使用 integer 像這樣的反轉變量時
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
是一個整數。 因此,它不可能大於Integer.MAX_VALUE
- 整數的最大值。
使用long
,其值可能大於最大可能的int
值。 Java int
是帶符號的 32 位值。 Java long
是有符號的 64 位值。
對我來說,這有效...
class Solution {
public int reverse(int x) {
int mod = 0, rev = 0;
while(x!=0){
if(rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
return 0;
}
mod = x%10;
x = x/10;
rev = rev*10 + mod;
}
return rev;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.