#include <stdio.h> #include <string.h> #define size 10000 int comput(int a[],int m,int n) { int i,j,k,top=m-1,max=0; int c[size]={0},b[size]={0}; for(i=0;i<m;i++) { b[i]=a[i]; c[i]=a[i]; } for(i=1;i<n;i++) { memset(c,0,sizeof(c)); for(j=0;j<m;j++) { for(k=0;k<=top;k++) { c[k+j]+=b[j]*a[k]; } } for(j=0;j<=top+m;j++) { if(c[j]>9) { c[j+1]+=c[j]/10; c[j]=c[j]%10; } } j=top+m+1; while(c[j]==0&&j>0) j--; top=j; for(j=0;j<=top;j++) a[j]=c[j]; } return top; } void output(int a[],int m,int n) { int i,len,back; i=m+1; while(a[i]==0&&i>=0) i--; len=i; if(i==-1) { printf("0/n"); return ; } if(n>len+1) { printf("."); for(i=0;i<n-len-1;i++) { printf("0"); } } i=0; while(a[i]==0&&i<n) ++i; back=i; for(i=len;i>=back;--i) { if(i==n-1) printf("."); printf("%d",a[i]); } printf("/n"); } int main() { char s[100]; int a[size]={0}; int i,j=0,n,point,len,len2; while(scanf("%s%d",s,&n)!=EOF) { len=strlen(s); for(i=len-1;i>=0;i--) { if(s[i]!='.') { a[j]=s[i]-'0'; j++; } else { point=len-1-i; } } len2=comput(a,j,n); output(a,len2,point*n); i=j=0; memset(a,0,sizeof(a)); } return 0; } 初涉ACM ,写了一上午才写好