题目
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
注意点
当指数为负数时,先对指数求绝对值,然后算出次方的结果后再取倒数。如果底数(base)是0,且指数是负数时,提示出错。
#include <iostream>
// 设置全局变量,表示函数调用时,输入参数有误
bool g_InvalidInput = false;
// 判断两个double数据是否相等
bool equal(double num1, double num2)
{
if (num1 - num2 < 0.000001 && num1 - num2 > -0.000001)
return true;
else
return false;
}
// 求base的exponent次方,exponent为非负数
double PowerWithUnsignedExponent(double base, unsigned exponent)
{
double result = 1.0;
for (int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
// 求base的exponent次方
double Power(double base, int exponent)
{
g_InvalidInput = false;
// 如果底为0,指数为负数,则参数有误
if (equal(base, 0.0) && exponent < 0)
{
g_InvalidInput = true;
return 0.0;
}
// absExponent: 指数的绝对值
unsigned absExponent = (unsigned)(exponent);
if (exponent < 0)
absExponent = (unsigned)(-exponent);
// 当指数为非负数时,求base的exponent次方
double result = PowerWithUnsignedExponent(base, absExponent);
// 当指数为负数时,结果为result的倒数
if (exponent < 0)
result = 1.0 / result;
return result;
}
int main()
{
std::cout << Power(0.5, -2);
return EXIT_SUCCESS;
}