注意边界条件,如000010之类的例外,没有'.' pku1001要比hdu1063弱
大数真烦人,谁让我不会java呢
#include<stdio.h> #include<string.h> #define N 200 int main() { int i,j,k,flag,low,high,n,r[N],t[N],result[N]; char input[10]; while(scanf("%s%d",input,&n)!=EOF) { memset(result,0,N*sizeof(int)); memset(r,0,N*sizeof(int)); memset(t,0,N*sizeof(int));t[0]=1; j=0; for(i=5;i>=0;i--) if(input[i]!='.') r[j++]=input[i]-'0'; for(i=5;i>=0;i--) if(input[i]=='.') break; flag=5-i; if(i==-1) flag=0; if(n==0) { printf("1/n"); continue; } k=0; for(i=0;i<N;i++) k+=r[i]; if(k==0) { printf("0/n"); continue; } for(k=0;k<n;k++) { for(i=0;i<5;i++) for(j=0;j<N;j++) result[j+i]+=t[j]*r[i]; for(j=0;j<N;j++) if(result[j]>9) { result[j+1]+=result[j]/10; result[j]%=10; } for(i=0;i<N;i++) t[i]=result[i]; memset(result,0,N*sizeof(int)); } for(i=0;i<N;i++) result[i]=t[i]; for(i=0;i<N;i++) if(result[i]) { low=i; break; } for(i=N-1;i>=0;i--) if(result[i]) { high=i; break; } flag=n*flag-1; if(flag>=high) { printf("."); for(i=flag;i>=low;i--) printf("%d",result[i]); printf("/n"); } else if(flag<low) { for(i=high;i>flag;i--) printf("%d",result[i]); printf("/n"); } else { for(i=high;i>=low;i--) { if(i==flag) printf("."); printf("%d",result[i]); } printf("/n"); } } }
posted on 2010-04-13 13:53 草头菜 阅读(95) 评论(0) 编辑 收藏 举报
Powered by: 博客园 Copyright © 2024 草头菜 Powered by .NET 8.0 on Kubernetes