题目描述
实现函数 double Power(double base, int exponent), 求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
这题主要是注意程序的鲁棒性,核心算法可以使用快速幂算法。
更多的快速幂写法
double Power(double base, int exponent)
{
if(equal(base,0.0)&&exponent<0) return 0.0;//输入错误返回0.0
double absExponent=abs(exponent);
double res=PowerCal(base,absExponent);
if(exponent<0) res=1.0/res;
return res;
}
double PowerCal(double base,int exponent)//快速幂
{
if(exponent==0) return 1.0;
if(exponent==1) return base;
double res=PowerCal(base,exponent>>1);//先求得base^exponent/2
res*=res;//相乘
if(exponent&1) return res*base;//如果是奇数再乘以base
else return res;
}
bool equal(double number1,double number2)//浮点数的比较
{
if(number1-number2>-1e-7&&number1-number2<1e-7) return true;
return false;
}