Java Int(当数字在范围内时为什么返回0)
Java Int(Why returning 0 when number is within range)
感谢您的宝贵时间!
对于高达 2147483641 的值,代码在 returning 0(为什么)之后工作正常。
根据我的理解,程序应该 return 仅在发生溢出时才为 0。(对于 -2147483648 和 2147483647 )而不是在范围内的值。
也请分享任何 link 前导零数字反转。我在网上找不到任何。
public class ReverseDigit {
public int reverse(int integer) {
boolean negflag=false;
if(integer<0){
negflag=true;
integer=integer*-1;
}
int rev=0;
int rem=0;
while(integer!=0){
rem=integer%10;
int newrev= rev*10+rem;
if((newrev-rem)/10!=rev){
return 0;
}
else{
rev=newrev;
}
integer=integer/10;
}
return rev = negflag?rev*-1:rev;
}
public static void main(String[] args) {
ReverseDigit rd = new ReverseDigit();
System.out.println(rd.reverse(**2147483642**));
}
}
这是因为2147483642
的倒数是2463847412
,而这个数大于Intrgre.MAX_VALUE
也就是2147483647
,所以这个数就变成了小于0。
2147483623
也是这样,因为他的倒数是3263847412
,这个数比Intrgre.MAX_VALUE
大。
为了解决这个问题,我看到了两种可能的解决方案:
- 使用
long
代替 int
。
- 重写使用
String
的方法,因为您实际上并没有进行任何计算(您可以使用 string.charAt(int index)
来获得数字 1 和 1)。
感谢您的宝贵时间!
对于高达 2147483641 的值,代码在 returning 0(为什么)之后工作正常。 根据我的理解,程序应该 return 仅在发生溢出时才为 0。(对于 -2147483648 和 2147483647 )而不是在范围内的值。
也请分享任何 link 前导零数字反转。我在网上找不到任何。
public class ReverseDigit { public int reverse(int integer) { boolean negflag=false; if(integer<0){ negflag=true; integer=integer*-1; } int rev=0; int rem=0; while(integer!=0){ rem=integer%10; int newrev= rev*10+rem; if((newrev-rem)/10!=rev){ return 0; } else{ rev=newrev; } integer=integer/10; } return rev = negflag?rev*-1:rev; } public static void main(String[] args) { ReverseDigit rd = new ReverseDigit(); System.out.println(rd.reverse(**2147483642**)); }
}
这是因为2147483642
的倒数是2463847412
,而这个数大于Intrgre.MAX_VALUE
也就是2147483647
,所以这个数就变成了小于0。
2147483623
也是这样,因为他的倒数是3263847412
,这个数比Intrgre.MAX_VALUE
大。
为了解决这个问题,我看到了两种可能的解决方案:
- 使用
long
代替int
。 - 重写使用
String
的方法,因为您实际上并没有进行任何计算(您可以使用string.charAt(int index)
来获得数字 1 和 1)。