Exponentiation(1001)

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

void main()
{
string num;
string strset1=".";
string strset2="0";
int n;
int wei;
int sum_wei;

cin>>num>>n;

int first=num.find_first_of(strset1);
if (first==string::npos)
{
wei=0;
}
else
{
wei=5-first;
num=num.substr(0,first)+num.substr(first+1);
}
first=num.find_first_not_of(strset2);
num=num.substr(first);
sum_wei=n*wei;

int i,j,k;
vector<char> vec;
for (i=0;i<num.size();i++)
{
vec.push_back(num.at(i));
}

vector<char> res;
res=vec;
vector<int> temp(num.size()*(n+1),0);
vector<char> result(num.size()*(n+1),0);

for (k=0;k<n-1;k++)
{
for (i=0;i<temp.size();i++)
{
temp.at(i)=0;
result.at(i)=NULL;
}

for (i=0;i<vec.size();i++)
{
for (j=0;j<res.size();j++)
{
temp.at(i+j+1)+=(vec.at(i)-'0')*(res.at(j)-'0');
}
}
for (i=vec.size()+res.size()-1;i>=0;i--)
{
if (temp.at(i)>=10)
{
temp.at(i-1)+=temp.at(i)/10;
temp.at(i)%=10;
}
}

i=0;
while (temp.at(i)==0)
i++;
for (j=0;i<res.size()+vec.size();i++,j++)
{
result.at(j)=temp.at(i)+'0';
}

res=result;
for (i=res.size()-1;i>=0;i--)
{
if (res.at(i)==NULL)
{
res.pop_back();
}
}
}

vector<char>::iterator it;
int diff=0;
if (sum_wei!=0)
{
if (sum_wei<res.size())
{
it=res.end();
res.insert(it-sum_wei,1,'.');
}
if (sum_wei==res.size())
{
it=res.begin();
res.insert(it,1,'.');
}
if (sum_wei>res.size())
{
it=res.begin();
diff=sum_wei-res.size();
res.insert(it,diff,'0');
res.insert(res.begin(),1,'.');
}
}

for (i=res.size()-1;i>=0;i--)
{
if (res.at(i)=='0')
{
res.pop_back();
}
else
break;
}

copy(res.begin(),res.end(),ostream_iterator<char>(cout,""));
cout<<endl;

}
原文地址:https://www.cnblogs.com/tiandsp/p/2343215.html