此问题已在此处有答案:
Math.abs returns wrong value for Integer.Min_VALUE(8个回答)
20小时前关闭。
我在做一个leetcode问题。https://leetcode.com/problems/powx-n/
实现pow(x,n),计算x的n次幂(即x^n)。
我不知道为什么最后一个测试用例失败了,x^-2147483648返回1而不是0。
1.为什么它会在第一位返回0?
1.此外,调试器中的Math.abs(n)仍然返回负-2147483648。
验证码:
class Solution {
public double myPow(double x, int n) {
if (n == 0)
return 1;
if (n < 0) {
return 1 / getDFS(x, Math.abs(n));
}
return getDFS(x, n);
}
private double getDFS(double x, int n) {
if (n == 1) {
return x;
}
double saveData = 1;
if (n / 2 >= 1) {
int newN = n / 2;
saveData = getDFS(x,newN);
}
if (n % 2 == 1) {
return saveData * saveData * x;
}
return saveData * saveData;
}
}
结果:
1条答案
按热度按时间vecaoik11#
最小负
int
值的大小大于最大正int
值的大小。因此,Math.abs
无法返回Integer.MIN_VALUE
的正确值。要解决这个问题,您可以在使用二进制取幂之前将指数转换为
long
。