#include "stdafx.h"
#include <bitset>
double Power(double base, int exp)
{
std::bitset<32> bits(exp);
int numOf1 = bits.count();
double tempResult[32];
for(int i=0;i<32;i++)
tempResult[i] = 1.0;
int count=0;
double power = 1.0;
for(int i=0;i<32&&count<numOf1;i++)
{
if(i==0)
power = base;
else
power = power * power;
if(bits.at(i))
{
tempResult[i] = power;
++count;
}
}
power = 1.0;
for(int i=0;i<32;i++)
{
if(bits.at(i))
power *= tempResult[i];
}
return power;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%lf\n",Power(2.5,2));
return 0;
}