实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
解决这道题需要明白快速幂
快速幂的二分解法:x^n =x(n/2)*x(n/2) (n为偶数的情况)。x^n =x(n/2)*x(n/2)*x (n为奇数的情况) 。
快速幂的二进制解法:xn=x(i1b1)*x^(i2b2)… in-》[0,1] bn-》[2^n-1]
public double myPow(double x, int n) {
if(x==0)return 0;
boolean flag=n<0;
if(flag){
return 1/absPow(x,Math.abs(n));
}else{
return absPow(x,Math.abs(n));
}
}
public double absPow(double x,int n){
if(n==0)return 1;
if(n==1)return x;
if ((n & 1) == 0) {
// 分治思想:分
double square = absPow(x, n >>> 1);
// 分治思想:合,下面同理
return square * square;
} else {
// 是奇数的时候
double square = absPow(x, (n - 1) >>> 1);
return square * square * x;
}
}