题目:就是求取一个数的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;
}