题目:实现函数double Power(double base,int exp),求base的exp次方。不得使用库函数,同时不需要考虑大数问题。
这道题本身难度不大,但有些细节需要注意。
由于题目已经给出了返回值呵参数中的double型,所以在进行判0的时候,就不能再用if(base == 0)这样的处理,而要使用浮点数的判0处理。
再者,exp是整型,所以有可能是0或负数,这些都是需要特殊处理的地方。
基于以上分析,我们给出如下代码:
//浮点数的比较大小
bool equal(double num1, double num2)
{
if ((num1 - num2 > -0.00000001) && (num1 - num2 < 0.00000001))
return true;
else
return false;
}
double PowerExp(double base, unsigned int exp)
{
double result = 1.0;
for (int i = 1; i <= exp; i++)
{
result *= base;
}
return result;
}
//数值的整数次方
bool g_invalidInput = false;
double Power(double base, int exp)
{
g_invalidInput = false;
//注意先判断合法性
if (equal(base, 0.0) && exp < 0)
{
g_invalidInput = true;
return 0.0;
}
//当指数小于0时要进行特殊处理
unsigned int absExp = (unsigned int)(exp);
if (exp < 0)
absExp = (unsigned int)(-exp);
double result = PowerExp(base, absExp);
if (exp < 0)
result = 1.0 / result;
return result;
}
int main()
{
double ret = PowerExp(2, 5);
cout << ret << endl;
system("pause");
return 0;
}