数值的整数次方
简单的for循环方式,超时。
public static double myPow(double x, int n) {
double res = 1;
if (n < 0) {
n = -n;
x = 1 / x;
}
for (int i = 1; i <= n; i++) {
res *= x;
}
return res;
}
快速幂求解。
注:n 是 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1] 。
int n = -2147483648 //对应的正数 2147483648 int类型无法表示
public double myPow(double x, int n) {
if (x == 0) return 0;
double res = 1;
long b = n; //注
if (n < 0) {
b = - b; //注
x = 1 / x;
}
while (b > 0) {
if ((b & 1) == 1)
res *= x;
x *= x;
b >>= 1;
}
return res;
}