/*
* 给定一个double类型的浮点数base和int类型的整数exponent。
* 求base的exponent次方。
*
* 思路:快速幂法
* 将幂exponent转换为二进制幂表示法,如13:1*2^3 + 1*2^2 + 0*2^1 + 1*2^0;
* 快速幂法将expoent >>1 ,如果exponent不为0则乘上本身,否则将base继续翻倍;
*
*/
public double Power(double base, int exponent) {
double cur = base;
int exp = exponent;
if(exp == 0){
return 1;
}else if(exp < 0){
if(cur == 0){
return 0;
}
exp = -exponent;
}else{
exp = exponent;
}
double res =1;
while(exp != 0){
if((exp & 1) == 1){
res *= cur;
}
cur *= cur;
exp >>= 1;
}
return exponent > 0 ? res : (1 / res);
}