71.数值的整数次方(数字、运算)。
题目:实现函数double Power(double base, int exponent),求base的exponent次方。
不需要考虑溢出。
分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:
double Power(double base, int exponent)
{
double result = 1.0;
for(int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
思路:
上述代码至少有一个问题:由于输入的exponent是个int型的数值,因此可能为正数,也可能是负数。上述代码只考虑了exponent为正数的情况。
接下来,我们把代码改成:
bool g_InvalidInput = false;
double Power(double base, int exponent)
{
g_InvalidInput = false;
if(IsZero(base) && exponent < 0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int unsignedExponent = static_cast<unsigned int>(exponent);
if(exponent < 0)
unsignedExponent = static_cast<unsigned int>(-exponent);
double result = PowerWithUnsignedExponent(base, unsignedExponent);
if(exponent < 0)
result = 1.0 / result;
return result;
}
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
double result = 1.0;
for(int i = 1; i <= exponent; ++i)
result *= base;
return result;
}