[洛谷]P1517 高精求小数幂
题目描述:
代码:
#include <bits/stdc++.h>
using namespace std;
string s;
int n,ans[11000];
int main(int argc, char const *argv[])
{
while(cin>>s>>n)
{
int a[55],b[11000],ans[11000];
int xsd=0,len=s.size()-1;
for(int i=0,pos=s.size()-1;i<s.size();i++,pos--)
{
if(s[i]=='.')
{
pos++;
xsd+=s.size()-i-1;
continue;
}
b[pos]=a[pos]=s[i]-'0';
}
xsd*=n,n--;
while(n--)
{
memset(ans,0,sizeof(ans));
for(int i=1;i<=s.size()-1;i++)
for(int j=1;j<=len;j++)
{
int pos=i+j-1,ttt=ans[pos]+(b[j]*a[i]);
ans[pos]=ttt%10;
ans[pos+1]+=ttt/10;
}
if(ans[len+s.size()-1])
len+=s.size()-1;
else
len+=s.size()-2;
for(int i=1;i<=len;i++)
b[i]=ans[i];
}
int left=len,right=1;
while(left>xsd && b[left]==0)
left--;
while(right<=xsd && b[right]==0)
right++;
for(int i=left;i>=right;i--)
{
if(i==xsd )
cout<<".";
cout<<b[i];
}
cout<<endl;
}
return 0;
}