UVA 748
#include<iostream> #include<cstring> #include<string> #include<cstdio> #include<fstream> #define maxn 10010 using namespace std; int n; char m[maxn]; int mmm=0; void add(char *n1,char *n2,char *re) //两数相加,结果存在re里面 { int i=0,j=0; int len1=strlen(n1); int len2=strlen(n2); int len11=strlen(re); for(i=0;i<len11;i++)re[i]=0; int tmp=0; for(i=(len1>=len2?len1:len2)-1,j=0;i>=0;i--,len1--,len2--,j++) { if(len1>=1)re[j]+=(n1[len1-1]-'0'); if(len2>=1)re[j]+=(n2[len2-1]-'0'); re[j]+=tmp; tmp=re[j]/10; re[j]=re[j]+'0'; } if(tmp!=0)re[j++]=tmp+'0'; char c1; for(i=0;i<(j/2);i++) { c1=re[i]; re[i]=re[j-i-1]; re[j-i-1]=c1; } } void one_mul(char *n,int a,char *re) { if(0==a){re[0]='0';re[1]='\0';return;} int len=strlen(n); int j=0,tmp=0; for(;len>=1;len--,j++) { re[j]=(n[len-1]-'0')*a+tmp; tmp=re[j]/10; re[j]=re[j]+'0'; } if(tmp!=0)re[j++]=tmp+'0'; re[j]='\0'; char c1; for(int i=0;i<(j/2);i++) { c1=re[i]; re[i]=re[j-i-1]; re[j-i-1]=c1; } } void mul(char *n1,char *n2,char *re) { char tmp[maxn]; char tmp1[maxn]; // int len1=strlen(re); // for(int i=0;i<len1;i++)re[i]=0; int len2=strlen(n2); for(int i=len2-1;i>=0;i--) { one_mul(n1,n2[i]-'0',tmp); int j=strlen(tmp); int k1=j+(len2-i)-1; for(;j<k1;j++) tmp[j]='0'; tmp[j]='\0'; memcpy(tmp1,re,sizeof(tmp1)); add(tmp1,tmp,re); } } int chuli(char *c) { char tmp[maxn]; int len=strlen(c); int po=len; int mark11=len; for(int len1=len-1;len1>=0;len1--) { if(c[len1]=='.') { po=len1; break; } } for(int i=len-1;i>=0;i--) { if(i>po&&c[i]!='0') { mark11=i; break; } } int k=0,j=0; int mark=0; for(k=0;k<=mark11;k++) { if(mark==0&&c[k]!='0'&&c[k]!='.') mark=1; if(1==mark&&c[k]!='.') { tmp[j++]=c[k]; } } if(j==0)tmp[j++]='0'; tmp[j]='\0'; memcpy(c,tmp,sizeof(tmp)); mmm=len-mark11-1; return po; } char mtmp[maxn]; char notchange[maxn]; void output(char *s,int a) { char tmpp[maxn]; int len=strlen(s); if(len<=a) { cout<<"."; for(int i=0;i<a-len;i++) cout<<"0"; cout<<s<<endl;; } else { for(int i=0;i<len;i++) { if(i==len-a)cout<<"."; cout<<s[i]; } cout<<endl; } } int main() { // freopen("test.txt","r",stdin); while(cin>>m>>n) { mmm=0; // memset(mtmp,0,sizeof(mtmp)); int leeen=strlen(m); int point_position=chuli(m); memcpy(notchange,m,sizeof(m)); for(int i=1;i<n;i++) { memcpy(mtmp,m,sizeof(m)); memset(m,0,sizeof(m)); mul(notchange,mtmp,m); } output(m,(leeen-point_position-1-mmm)*n); // cout<<m<<endl; } return 0; }