題目描述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。
普通算法:時間複雜度O(n)
public class Solution {
public double Power(double base, int exponent) {
double res = 1;
int n;
if(exponent>0){
n = exponent;
}else if(exponent<0){
n = -exponent;
}else{// n==0
return 1;// 0的0次方
}
for(int i=1;i<=n;i++){
res=res*base;
}
return exponent>=0?res:(1/res);
}
}
快速冪:時間複雜度O(log(n))
public double Power(double base, int n) {
double res = 1,curr = base;
int exponent;
if(n>0){
exponent = n;
}else if(n<0){
if(base==0)
throw new RuntimeException("分母不能爲0");
exponent = -n;
}else{// n==0
return 1;// 0的0次方
}
while(exponent!=0){
if((exponent&1)==1)
res*=curr;
curr*=curr;// 翻倍
exponent>>=1;// 右移一位
}
return n>=0?res:(1/res);
}