Java 整数反转失败4例

Java 整数反转失败4例,java,integer,reverse,Java,Integer,Reverse,出于某种原因,此代码仅在4种情况下失败,即当通过1534236469时,它应该返回0,但返回2147483647 编辑:代码应该反转其传递的值。如果给定123,则需要返回321 class Solution { public int reverse(int x) { int val = x; if(val >= (Math.pow(2,31))||val<= Math.pow(-2,31)){ return 0;

出于某种原因,此代码仅在4种情况下失败,即当通过1534236469时,它应该返回0,但返回2147483647

编辑:代码应该反转其传递的值。如果给定123,则需要返回321

class Solution {
    public int reverse(int x) {
        int val = x;
        if(val >= (Math.pow(2,31))||val<= Math.pow(-2,31)){
            return 0;
        }
        int sum = 0;
        String str = ""+Math.abs(x);
        
        char[] c = str.toCharArray();
        int power = c.length-1;
        for(int i = c.length-1;i>=0;i--){
            
            int j = Integer.parseInt(""+c[i]);
            sum+=(Math.pow(10,power)*j);
            power--;
        }
        if(x<0){
            sum=sum*-1;
        }
        return sum;
    }
}
类解决方案{
公共整数反转(整数x){
int val=x;
如果(val>=(Math.pow(2,31))| | val=0;i--){
int j=Integer.parseInt(“+c[i]);
总和+=(数学功率(10,幂)*j);
权力--;
}

如果(x您有未检测到的
int
溢出

Math.pow(2,31)
是2147483648。类似地,
Math.pow(-2,31)
是-2147483648。您尝试反转的值1534236469正好在这些范围内。因此,您的方法跳过了开头的
if
语句,它可能返回0

然后,它尝试反转数字。反转的数字应该是9 646 324 351。但是这个数字太大,无法放入32位有符号的
int
。Java所做的是丢弃最前面的位(最高有效位)。这必然会给我们一个无意义的结果。恰好是2 147 483 647(可装入
int
的最大数字)


解决方案?一种方法是以
long
而不是
int
计算总和。这将确保没有溢出。如果要在
int
溢出时返回0,则在结束时检查总和是否小于2^32,如果不小于,则返回0。

为什么不使用Integer.MAX\u值和Integer.MIN_值而不是使用Math.Pow和幻数?要获取整数的最低位数并将其从整数中删除,
int d=x%10
,然后
x=x/10
。105表示d=5和x=10。