1、当指数为负数的时候,可以求指数的绝对值,算出次方的结果再求倒数(正数正常计算)
2、当底数为0 指数为负数时候 按照指数为负数的计算方法 0会为分母(分母不能为0)这时候会出错(注意)
3、使用全局标志位标识是否出错
代码:
#include<iostream>
bool flag = true;
bool equals(double base)
{
if (-0.0000001 <= base&&base <= 0.0000001)
return true;
else
return false;
}
double power(double base,unsigned int exponent)
{
double result=1.0;
for (unsigned int i = 1; i <= exponent; i++)
{
result *= base;
}
return result;
}
double isExponent(double base, int exponent)
{
if (equals(base) && exponent < 0)//判断指数为负数 底数是否为0
{
std::cout << "error" << std::endl;
flag = false;
return 0.0;
}
unsigned int Exponent = (unsigned int)exponent;
if (exponent < 0) /*处理指数为负数的情况*/
Exponent = (unsigned int)(-exponent);
double result = power(base, Exponent);
if (exponent < 0) //指数为负数时 结果取倒数
{
result = 1.0 / result;
}
return result;
}
int main()
{
std::cout << "result=" << isExponent(-1, -3)<< std::endl;
}
出处剑指offer(16题)还有更为高效的算法 (递归)
写得不好,请见谅