题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- 首先Math类中提供实现方法 Math.pow(base,exponent)
- 最普通的解决办法就是按照幂次的定义O(n)
public double Power(double base, int exponent) {
double res=1;
if(exponent==0)
return 1;
if(exponent>0){
for(int i=0;i<exponent;i++){
res=res*base;
}
}
if(exponent<0){
for(int i=0;i>exponent;i--){
System.out.println(res);
res=res*base;
}
res=1/res;
}
return res;
}
- 使用移位,第一次将指数与1进行与运算,取到指数为1,结果就是1*底数
- 接着底数翻倍,指数向右移1位,一直到指数右移为0
- 例子2^3=2^1*2^2
- 对应2^011=2^001*2^010
public double Power(double base, int n) {
double res = 1,curr = base;
int exponent;
if(n>0){
exponent = n;
}else if(n==0){
return 1;
}else{
exponent = -n;
}
while(exponent!=0){
if((exponent&1)==1)
res*=curr;
curr*=curr;// 翻倍
exponent>>=1;// 右移一位
}
return n>=0?res:(1/res);
}