题目
给出一个浮点数base,和他的指数次方exponent,求结果
考虑到二进制,另curr = base,当exponent & 1 == 1时,证明当前最右位为1,此时res = res*curr,随后exponent右移一位,此时curr应当翻倍, 循环执行,当exponent为0 时,停止,时间复杂度为exponent 的二进制位数,大大降低。
代码如下:
public double pow(double base,int exponent){
double res = 1;
double curr = base;
boolean flag = false;
if(exponent < 0){
flag = true;
exponent = -exponent;
}
while(exponent > 0){
if((exponent&1) == 1)
res *= curr;
exponent >>= 1;
curr *= curr;
}
return flag?1/res:res;
}