数值的整数次方
/*
* 实现函数double Power(double base, int exponent),求base的exponent次方。
* 不得使用库函数,同时不需要考虑大数问题。
*/
/*
* 考虑不够全面的解法,没有考虑到输入的指数小于0的情况
*/
double Power(double base, int exponent)
{
double result = 1.0;
for (int i = 1; i < exponent; ++i)
{
result *= base;
}
return result;
}
/*
* 考虑较全面的解法
*/
#include<cmath>
//比较两个double类型是否相等
bool equal(double num1, double num2)
{
if (abs(num1 - num2) < 0.000001)
{
return true;
}
return false;
}
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
double result = 1.0;
for (int i = 1; i <= exponent; ++i)
{
result *= base;
}
return result;
}
bool g_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 = abs(exponent);
double result = PowerWithUnsignedExponent(base, absExponent);
if (exponent < 0)
{
result = 1.0 / result;
}
return result;
}
/*
* 高效的解法,用于优化上面PowerWithUnsignedExponent函数。
* 如果exponent为32,那么就需要做31次乘法。换一种思路,如果求一个数字的32次方,
* 我们知道了这个数的16次方,那么只需要他的16次方再平方就可以了,依次递归。
*/
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;
}
posted on 2021-11-24 08:31 xcxfury001 阅读(45) 评论(0) 收藏 举报
浙公网安备 33010602011771号