给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
一个数字的整数次方,可以转化为二进制乘法
例如3^7可以转化为二进制3^1011=3^1000*3^10*3^1
就可以利用位操作快速算出幂,代码如下
class Solution {
public:
double Power(double base, int exponent) {
int temp,n,i;
float res=1;
if(exponent>0) n=exponent; //首先判断幂次的正负
else if(exponent<0) n=-exponent;
else{
if(base!=0) return 1;
}
temp=base;
for(i=0;i<sizeof(int)*8;i++){ //遍历幂次的二进制
if(n&(1<<i)) res*=temp; //只有当幂次相应位数为1时,才将数字乘如结果
temp*=temp; //不断做平方运算
}
return exponent>=0?res:(1/res); //若幂次为负则为倒数
}
};