标签:c++ iostream poj 编程 numbers
Time Limit: 500MS | Memory Limit: 10000K | |
Total Submissions: 147507 | Accepted: 36006 |
Description
Input
Output
Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
Hint
C++ while(cin>>s>>n) { ... } c while(scanf("%s%d",s,&n)==2) //to see if the scanf read in as many items as you want /*while(scanf(%s%d",s,&n)!=EOF) //this also work */ { ... }
Source
ACcode:
#include <iostream> #include <cstring> #include <cstdio> #define maxn 999999 using namespace std; char a[10]; int add[10],ans[maxn],res[maxn],n,doc,len; void put1(){ if(doc==-1){ bool flag=false; for(int i=ans[0];i>=1;--i){ if(ans[i]!=0)flag=true; if(flag)printf("%d",ans[i]); } } else { doc=5-doc; doc*=n; int flag1,flag2; for(int i=1;i<=ans[0];++i) if(ans[i]!=0){ flag1=i; break; } for(int i=ans[0];i>=1;--i) if(ans[i]!=0){ flag2=i; break; } if(flag2<doc)flag2=doc; if(flag1>doc)flag1=doc+1; bool flag=false; while(flag2>=flag1){ if(flag2==doc)putchar('.'); printf("%d",ans[flag2]); flag2--; } } putchar('\n'); } void fun(){ memset(res,0,sizeof(res)); for(int i=1;i<=ans[0];i++) { for (int j=1;j<=len;j++) { res[i+j-1]+=ans[i]*add[j]; if (res[i+j-1]>9) { res[i+j] += res[i+j-1] / 10; res[i+j-1] %= 10; } } } if(res[ans[0]+len-1]>9){ res[ans[0]+len]+=res[ans[0]+len-1]/10; res[ans[0]+len-1]%=10; } ans[0]=ans[0]+len; for(int i=1;i<=ans[0];i++)ans[i]=res[i]; } int main(){ while(cin>>a>>n){ if(n==0){ printf("1\n"); continue; } memset(ans,0,sizeof(ans)); memset(add,0,sizeof(a)); doc=-1;len=6; int i,j,cnt=0; for(i=0;i<6;++i){ if(a[i]=='.'){ doc=i; len=5; } if(a[i]=='0')cnt++; } if(cnt==len){ printf("0\n"); continue; } for(i=5,j=1;i>=0;--i) if(i!=doc){ add[j]=(a[i]-'0'); ans[j]=add[j]; j++; } ans[0]=len; for(i=1;i<n;++i) fun(); put1(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:c++ iostream poj 编程 numbers
原文地址:http://blog.csdn.net/zp___waj/article/details/47702205