简单快速幂:https://blog.csdn.net/aston5128/article/details/53485752
这篇博客中提到了三种简单快速幂的方法,我用后两种做了一下这道题。
采用二分法思想的递归实现:
class Solution {
public:
double Power(double base, int exponent) {
if (exponent > 0){
if(exponent == 1){
return base;
}
if(exponent%2 ==0){
return Power(base,exponent/2)*Power(base,exponent/2);
}
else{
return Power(base,exponent/2)*Power(base,exponent/2+1);
}
}
else if(exponent < 0){
return 1/Power(base,0-exponent);
}
else{
return 1;
}
}
};
采用把指数用二进制表示的方法:
class Solution {
public:
double Power(double base, int exponent) {
if(exponent >0){
double result=1.0, nbase=base;
while(exponent){
if(exponent & 1) result *= nbase;
nbase *= nbase; //翻倍,从base的1次幂开始,2次幂,4次幂,8次幂……
exponent >>= 1;
}
return result;
}
else if(exponent<0){
return 1/Power(base,0-exponent);//负数有负数次幂,0有没有负数次幂?
}
else{
return 1;
}
}
};