您的位置:首页 > 理论基础 > 数据结构算法

数据结构练习(33)数值的整数次方

2012-12-18 13:53 239 查看
http://zhedahht.blog.163.com/blog/static/254111742009101563242535/

思路:

见过斐波那契,然后这题直接想到了递归2分法求解。

方法一还是蛮不错的,利用了位运算。不过代码写起来比较冗长。

#include <iostream>
#include <bitset>
using namespace std;

double PowerWithExponent_1(double base, size_t exp)
{
bitset<32> bits(exp);

if (bits.none())
return 1.0;

double b[32];
for (int i = 0; i < 32; ++i)
b[i] = 1.0;

double power = 1.0;
size_t cnt = 0;
for (int i = 0; i < 32 && cnt <= bits.count(); ++i)
{
if (i == 0)
power = base;
else
power *= power;

if (bits.at(i))
b[i] = power, ++cnt;
}

power = 1.0;
for (int i = 0; i < 32; ++i)
if (bits.at(i))
power *= b[i];

return power;
}

double PowerWithExponentRecursively(double base, unsigned int exp)
{
if (exp == 0)
return 1.0;

double power = PowerWithExponentRecursively(base, exp >> 1);
power *= power;

if (exp & 0x01)
power *= base;

return power;
}

int main()
{
double power1 = PowerWithExponent_1(2.3, 3);
double power2 = PowerWithExponentRecursively(2.3, 3);
cout << power1 << " " << power2 << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: