话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input本题目包含多组测试数据,请处理到文件结束。 这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。 Output请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1Sample Output
4 3.4555434454 2.1水题,不解释,,,就是有点麻烦。。
#include<stdio.h> #include<string.h> #define N 500 int main() { int n,m,c[N],d[N],e[N],f[N],x[N],y[N]; char a[N],b[N]; while(~scanf("%s%s",a,b)) { memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); memset(f,0,sizeof(f)); int la=strlen(a); int t=la;//zhong yao !!!!! int lb=strlen(b); int k=lb; for(int i=0; i<la; i++) { if(a[i]=='.') t=i; } for(int i=0; i<lb; i++) { if(b[i]=='.') k=i; } for(int i=0,j=t-1; i<t; i++,j--) c[i]=a[j]-'0'; for(int i=0,j=k-1; i<k; i++,j--) d[i]=b[j]-'0'; for(int i=t+1,j=0; i<la; i++,j++) e[j]=a[i]-'0'; for(int i=k+1,j=0; i<lb; i++,j++) f[j]=b[i]-'0'; int minn=0,maxn=0;//xiaoshuzuixiao if((la-t)<(lb-k)) minn=lb-k; else minn=la-t; int pos=0; for(int i=minn-1; i>=0; i--) { x[i]=e[i]+f[i]+pos; if(x[i]>=10) { x[i]-=10; pos=1; } else pos=0; } if(t<k) maxn=k; else maxn=t; for(int i=0; i<=maxn; i++) { y[i]=c[i]+d[i]+pos;//注意pos不需要初始化 if(y[i]>=10) { y[i]-=10; pos=1; } else pos=0; } if(y[maxn])printf("%d",y[maxn]); for(int i=maxn-1; i>=0; i--) { printf("%d",y[i]); } while(x[minn-1]==0) { minn--; } if(minn>0) printf("."); for(int i=0; i<minn; i++) printf("%d",x[i]); printf("\n"); } return 0; }