初来poj时写的经验不足用标准C++写的,效率有些低 #include <iostream> #include <string> const int N=500; using namespace std; //------------------------------------------------------------- void print(int a[],int PointIndex,int size) { int i; if(PointIndex==0) { if(size==0) { cout << 1 << endl; return; } for(i=N-1;i>=0&&a[i]==0;i--) ; for(;i>=0;i--) cout << a[i]; cout << endl; return; } int total=PointIndex*size; if(total==0) { cout << 1 << endl; return; } for(i=N-1;i>=0&&a[i]==0;i--) ; if(total<i+1) { for(;i>=total;i--) cout << a[i]; cout << '.'; for(;i>=0;i--) cout << a[i]; cout << endl; } else { cout << '.'; for(i=total-1;i>=0;i--) cout << a[i]; cout << endl; } } int SizeOfA(int a[]) { int i; for(i=N-1;i>=0&&a[i]==0;i--) ; return i+1; } void Mutiply(int a[],int b[],int m,int n) { int i; int j; for(i=m-1;i>=0;i--) { for(j=n-1;j>=1;j--) a[i+j]+=a[i]*b[j]; a[i]*=b[0]; } for(i=0;i<m+n;i++) { a[i+1]+=a[i]/10; a[i]%=10; } } int main() { int a[N]; int b[N]; string s; int PointIndex=0; int i=0; int j=0; int flag; int count=0; int n; while(cin >> s >> n) { count=0; flag=1; j=0; PointIndex=0; for(i=0;i<N;i++) a[i]=0; for(i=0;i<N;i++) b[i]=0; for(i=s.size()-1;i>=0;i--) { if(flag==1&&s[i]=='0') { count++; continue; } else if(s[i]!='.') { flag=0; a[j++]=s[i]-'0'; } else { flag=0; PointIndex=s.size()-i-1; } } PointIndex-=count; for(i=0;i<N;i++) b[i]=a[i]; for(i=0;i<n-1;i++) Mutiply(a,b,SizeOfA(a),s.size()-count); print(a,PointIndex,n); } return 0; }