题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路
当底数小于0,且幂数小于0时候,0不能做除数,需要特殊处理;然后注意幂数分大于小于 0两种情况就好了;
还有一种好方法从书上看得,有个公式 a_n={■8(a^(n/2)⋅a^(n/2) ,a为偶数@a^((n−1)/2)⋅a^((n−1)/2)⋅a ,a为奇数)┤
然后还可以用右移符号代替除2提高效率
code
class Solution {
public:
//方法1
double Power(double base, int exponent) {
double res=1.0;
if(base<0.0&&exponent<0){
return 0.0;
}
while(exponent>0){
res*=base;
exponent--;
}
while(exponent<0){
res/=base;
exponent++;
}
return res;
}
//方法2
double Power(double base, int exponent){
if(exponent==0)
return 1;
if(exponent==1)
return base;
if(base<0.0&&exponent<0)
return 0.0;
double res=Power(base, exponent>>1);
res*=res;//
if(exponent&0x1==1){
res*=base;//如果是exponent奇数计算到最后在乘一个base
}
return res;
}
};