您的位置:首页 > 其它

数值的整数次方

2015-07-07 16:18 316 查看




解法一:不好的解法


double Power(double base,int exponent)

{

double result=1.0;

for(int i=1;i<=exponent;++i)

result*=base;

return result;

}

解法一没有考虑指数为0和负数的情况,只考虑了指数为正数的情况。



解法二:全面但不高效的解法


bool q_InvalidInput = false;

double Power(double base, int exponent)

{

g_InvalidInput = false;

if (equal(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 = PowerWithUnsignedExponent(base,absExponent);

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;

}

bool equal(double num1, double num2)

{

if ((num1 - num2 > -0.0000001) && (num1 - num2) < 0.0000001))

return true;

else

return false;

}


解法三:全面又高效的解法

使用公式求a的n次方:


将解法二的double PowerWithUnsignedExponent函数修改为:

double PowerWithUnsignedExponent(double base, unsigned int exponent)

{

if (exponent == 0)

return 1;

if (exponent == 1)

return base;

double result = PowerWithUnsignedExponent(base, exponent >> 1);

result *= result;

if (exponent & 0x1 == 1)

result *= base;

return result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: