感谢您的宝贵时间!
-
的值高达2147483641代码工作正常,之后它返回0(为什么)..根据我的理解,只有当溢出发生时,程序才应该返回0。(对于-2147483648和2147483647)不用于值落在范围内。
-
也请分享任何前导零反转的链接。我在网上找不到。
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)。