原题描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
简单的快速次幂。将exponent拆分为二进制,然后令powerNum=base;通过&和>>来求exponent对应二进制的每一位,如果该位为1,则powerNum*=powerNum。需要注意的是该题考虑了exponent<0的情况,所以需要先求exponent绝对值再最后根据正负情况来判断返回的是res还是1/res。
class Solution {
public:
double Power(double base, int exponent) {
double res=1.0;
double powerNum=base;
if(exponent==0) return 1;
int n=abs(exponent);
while(n!=0){
if((n&1)==1) res*=powerNum;
powerNum*=powerNum;
n>>=1;
}
return exponent>0?res:1/res;;
}
};