Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
230K O(n)#include <iostream> using namespace std; int GET_R(char R[],int r[]) { int i,j=0,p=0; for(i=5;i>=0;i--) { if(R[i]=='.') p=5-i;//记录小数点位置 else r[j++]=(int)R[i]-48;//char transfer to int } //经转换 r为整数 且R*10^p=r return p; } int compute(int sss[6][125],int r[6]) { int i,j; for(i=1;i<=5;i++) for(j=1;j<=124;j++) { if(j-i>=0) sss[i][j]=sss[0][j-i];//错位装填,第一行为r,第二行为10r..... else sss[i][j]=0; } for(i=0;i<=5;i++) for(j=0;j<=124;j++) sss[i][j]*=r[i]; //矩阵每一行乘以对应位 每位最大为81 for(j=0;j<=124;j++) for(i=1;i<=5;i++) sss[0][j]+=sss[i][j]; //矩阵列求和装入第一行,得到带权重的结果,每位最大为81*6 for(j=0;j<=123;j++) //每位保留对10求余,进位加到下一位 { sss[0][j+1]+=(sss[0][j]-sss[0][j]%10)/10;//进位给下一位 sss[0][j]=sss[0][j]%10; //对10求余是本位得数 } //R^n=sss*10^(-point*n) return 0; } int show_result(int sss[6][125],int p) { int i=124,j=0; while(sss[0][j]==0) j++; while(sss[0][i]==0&&i>p) i--; if(sss[0][i]==0) { cout<<'.'; i=p-1; while(i>=j) { cout<<sss[0][i--]; } } else { while(i>=p) cout<<sss[0][i--]; if(p>0&&i>=j) cout<<'.'; while(i>=j) cout<<sss[0][i--]; } cout<<endl; return 0; } int main() { char s[6]; int point,n,i; while(cin>>s>>n) { if(n==0) cout<<1<<endl; else { int r[6]={0}; int sss[6][125]={0}; point=GET_R(s,r); point*=n;//point*n是结果中小数的位数 for(i=0;i<=5;i++) { sss[0][i]=r[i]; }//r装入矩阵sss 左低右高 while(--n>0) compute(sss,r);//sss*=r show_result(sss,point); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator