我写了一个方法来反转有符号整数。如果反转的数字不在 INT_MAX 和 INT_MIN 范围内,它将返回 0。它适用于除 -2147483648 之外的几乎所有情况 在调试时,我发现代码无法正确处理 -2147483648 的符号,而它适用于不同的签名输入。
有人可以解释为什么 Math.abs(x) 对于这个测试用例不能正常工作吗? 下面给出方法。
public int reverse(int x) {
boolean flag = (x>0);
x = Math.abs(x);
String num = new StringBuilder(Integer.toString(x)).reverse().toString();
long temp = Long.parseLong(num);
if(!flag){
temp = -temp;
}
if((Integer.MAX_VALUE < temp) || ( temp < Integer.MIN_VALUE)){
return 0;
}
return (int) temp;
}
在Java中,整数表示从Integer.MIN_VALUE = -2^31 = -2147483648到Integer.MAX_VALUE = 2^31-1 = 2147483647。没有与-2147483648相反的正值可以表示。