题目:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大多数问题。
此题咋看非常easy,但是却很容易忽视底数为0以及指数为负数的情况,完整代码如下:
//全局变量,当参数出错时返回true
bool g_InvalidInput=false;
//判断两个double型变量是否相等
bool isEqual(double n1, double n2)
{
if ((n1-n2>-0.000001)&&(n1-n2<0.000001))
{
return true;
}
else
{
return false;
}
}
//base的exponent次方,此函数的前提是base不为0,并且exponet不为负数
double unsignedPower(double base, int exponent)
{
double res=1;
while(exponent--)
{
res*=base;
}
return res;
}
//完整的求base的exponent次方函数
double Power(double base, int exponent)
{
g_InvalidInput=false;
if (isEqual(base,0.0)&&exponent<0)
{
g_InvalidInput=true;
return 0.0;
}
unsigned int absExponent=(unsigned int)exponent;
if (exponent<0)
{
absExponent=(unsigned int)(-exponent);
}
double result=unsignedPower(base,absExponent);
if (exponent<0)
{
result=1.0/result;
}
return result;
}