实现函数 double Power(double base, int exponent),求base的exponent次方。
1.基础方法
public double Power(double base, int exponent) {
if(exponent == 0){
return 1;
}
if(base == 0){
return 0;
}
if(exponent < 0){
base = 1/base;
exponent = -exponent;
}
double res = 1;
while (exponent>0){
exponent --;
res = res * base;
}
return res;
}
2.使用快速幂
通过使底数平方的方式减少循环次数。例如求38变为(32)4
分为三种情况:
exponent 偶数: xn/2 * xn/2
exponent 奇数: x * xn-1
exponent 0: 返回1
public double Power(double base, int exponent) {
if(exponent == 0){
return 1;
}
if(base == 0){
return 0;
}
if(exponent < 0){
base = 1/base;
exponent = -exponent;
}
return quickPower(base,exponent);
}
private double quickPower(double x,int y){
double res = 1;
while (y!=0){
if((y & 1)!=0) { //奇数
res = res * x;
}
x = x*x;
y = y >>1;
}
return x;
}
香帐簇成排窈窕,金针穿罢拜婵娟。
—— 唐·罗隐