解题思考点:
1.当底数为0时,在数学中无意义,结果0为1都可以,我输出了0;
2.当指数为负数时,把它先转为整数,求的结果result,最后在1.0除以result,就是最终的答案。
3.求数值的整数次方时,用了高效的解法,假如次方为16,如果我们已经知道了数的8次方,只要在平方就可以了,。。。以此类推,这是一个递归的函数。
a^n=(a^(n/2))*(a^(n/2))=(a^(n/2))^2 n为偶数
a^n=(a^((n-1)/2))*(a^((n-1)/2))=(a^((n-1)/2))^2 n为奇数
class Solution {
public:
bool equal(double base,double num)
{
if((base-num>-0.0000001)&&(base-num<0.0000001))
return true;
else
return false;
}
double PowerExponent(double base,unsigned int absexponent)
{
if(absexponent==0)
return 1.0;
if(absexponent==1)
return base;
double result=PowerExponent(base,absexponent>>1);
result*=result;
if(absexponent&0x1==1) //指数为奇数
{
result*=base;
}
return result;
}
double Power(double base, int exponent) {
if(equal(base,0.0)&&exponent<0) //底数为0,但指数不小于0,正常运行
{
return 0.0;
}
unsigned int absexponent=exponent;
if(exponent<0)
absexponent=-exponent;
double result=PowerExponent(base,absexponent);
if(exponent<0) //为负数
result=1.0/result;
return result;
}
};