现在的位置: 首页 > 综合 > 正文

第三十四题 求取一个数的n次方

2018年04月13日 ⁄ 综合 ⁄ 共 1027字 ⁄ 字号 评论关闭

题目:就是求取一个数的n次方,不考虑溢出问题,这里用的一个时间复杂度较低的方法解决

<pre name="code" class="cpp">#include <iostream>
#include <bitset>
using namespace std;
double getvalue(int base,int element)
{
	//除0外,每一个数都可以用2的次方来表示,用2进制数来保存element,这样求取base的element次方时可以简化为求取base的平方、四次方等
	bitset<32> bite(element);
	if (bite.none())
	{
		return 1;
	}
	int numof1=bite.count();
	int sum[32]={0};
	int count=0;
	//当bite中i位置上数字为1时,用sum保存base的i+1次方的结果
	double basesum=0;
	for (int i=0;i<32&&count<numof1;++i)
	{
		if (i==0)
		{
			basesum=base;
		}
		else
		{
			basesum=base*base;
		}
		if (bite.at(i)==1)
		{
			++count;
			sum[i]=basesum;
		}
	}
	basesum=1;
	for (int i=0;i<32;++i)
	{
		if (bite.at(i))
		{
			basesum*=sum[i];
		}
	}
	return basesum;
}
//递归方法求取
double getvalueother(double base, unsigned int element)
{
	if(element == 0)
		return 1;
	if(element == 1)
		return base;
	//element为偶数时,求取base的element/2次方的平方就可以
	//element为奇数是,求取base的(element-1)/2次方的平方就可以
	double result = getvalueother(base, element >> 1);
	result *= result;
	if(element & 0x1 == 1)
		result *= base;

	return result;
}
int main()
{
	int base=3;
	int element=2;
	double sum=0;
	sum=getvalue(base,element);
	cout<<sum<<endl;
	sum=0;
	sum=getvalueother(base,element);
	cout<<sum<<endl;
	return 0;
}

抱歉!评论已关闭.