题目描述:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:1.当底数小于0且指数大于0,出现除0错误要处理
2.判断double底数是否为0,不能用==
3.优化求幂运算:n=偶数:b的n次方=b的(n/2)次方 * b的(n/2)次方;n=奇数:b的n次方=b的((n-1)/2)次方* b的((n- 1)/2)次方 * b。
4.除2运算用左移:e>>1
5.判断奇数用(e&1)==1
代码实现:
bool equal(double a,double b)
{
if(abs(a-b)<0.000001)
return true;
else return false;
}
double Power(double base, int exponent) {
if(equal(base,0.0)&&exponent<0)
return 0.0;
int absexponent=abs(exponent);
double result=getpower(base,absexponent);
if(exponent<0)
result=(1.0/result);
return result;
}
//优化求幂函数
double getpower(double b,int e)
{
if(e==0) return 1.0;
if(e==1) return b;
double result=getpower(b,e>>1);//e左移一位是除以2,求得b的(n/2)次方或者(n-1)/2次方
result*=result;//b的n次方=b的(n/2)次方 * b的(n/2)次方
//或者b的n次方=b的((n-1)/2)次方* b的((n-1)/2)次方 * b
if((e&1)==1) result*=b; //指数为奇数
return result;
}