RT
求大佬指点orz
//P1517 高精度求小数的整数幂
#include<bits/stdc++.h>
using namespace std;
const int N=2200;
int n;
int a[N],b[N],c[N];
int la,lb,lc,ls;
char s[N];
int main(){
while(scanf("%s %d",s,&n)!=EOF){
ls=strlen(s);
int p;
for(p=0;p<ls;p++)if(s[p]=='.')break;
la=0;
for(int i=0;i<ls;i++){
if(s[ls-i-1]=='.')continue;//倒序存储
la++;
a[la]=s[ls-i-1]-'0';
}
p=(ls-p-1)*n;//小数位置
for(int i=0;i<=la;i++)c[i]=a[i];
lc=la;
for(int op=2;op<=n;op++){
for(int i=0;i<=lb;i++)b[i]=c[i];
for(int i=0;i<=lc;i++)c[i]=0;
lb=lc;
for(int o=0;o<=lb;o++)cout<<b[o]<<" ";
cout<<endl;
lc=la+lb;
for(int i=1;i<=la;i++){
for(int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
while(c[lc]==0&&lc>p)lc--;
}
int aa,bb;
bb=1;
aa=lc;
while (c[aa]==0&&aa>p) aa--;
while (c[bb]==0) bb++;
for(int i=aa;i>=bb;i--){
if(i==p)cout<<".";
cout<<c[i];
}
cout<<endl;
}
return 0;
}