题目类别:实现Pow(x, n)
题目注意点:
记住一个整数在-2147483648和2147483647的值之间
如果n = -2147483648,那么-n = 2147483648; 因此-n大于最大可能的整数值,因此-n不是整数。并记住,myPow的第二个输入n必须是一个整数。因为这里传递的值(-n)不是int,所以编译器会报错
然而,如果n = -2147483648,则 - (n + 1)= - (-2147483648 + 1)= 2147483647,其为整数; 然后我们可以将该值传递给myPow而不用编译器报错。
代码如下:
public static double myPow(double x, int n) {
if (n > Integer.MAX_VALUE || n < Integer.MIN_VALUE)
return 0;
if (n == 0)
return 1;
if (n < 0) {
return ((1 / x) * myPow(1 / x, -(n + 1)));//对于 negative integers (i.e, n = -2147483648).Example, x^(-3) = (1/x)^3 = (1/x) * (1/x)^2 = (1/x) * (1/x)^(-(-2)) = (1/x) * [(1/x)^(-(-3+1)] = 1/x * [(1/x)^2]
}
return (n % 2 == 0) ? myPow(x * x, n / 2) : x * myPow(x * x, n / 2);
}