大明A+B
时间限制: 1 Sec 内存限制: 32 MB
本题目包含多组测试数据,请处理到文件结束。 每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
1.1 2.9 1.1111111111 2.3444323343 1 1.1
4 3.4555434454 2.1
#include<stdio.h> #include<string.h> #define MAX(a,b) (a>b)?a:b int main() { int i,j,a1[410],a2[410],b1[410],b2[410]; int lena,lenb,len,k1,k2,k,p; char a[410],b[410]; while (scanf("%s%s",a,b)!=EOF) { memset(a1,0,sizeof(a1)); memset(a2,0,sizeof(a2)); memset(b1,0,sizeof(b1)); memset(b2,0,sizeof(b2)); lena=strlen(a);lenb=strlen(b); k1=lena;k2=lenb; for (i=0;i<lena;i++) { if (a[i]=='.') { k1=i; break; } } for (j=0;j<lenb;j++) { if (b[j]=='.') { k2=j; break; } } for (i=k1-1;i>=0;i--) a1[k1-i-1]=a[i]-'0'; for (j=k2-1;j>=0;j--) b1[k2-j-1]=b[j]-'0'; for (i=k1+1;i<lena;i++) a2[i-k1-1]=a[i]-'0'; for (j=k2+1;j<lenb;j++) b2[j-k2-1]=b[j]-'0'; k=MAX(lena-k1-1,lenb-k2-1); for (i=k-1;i>0;i--) { a2[i]+=b2[i]; if (a2[i]>9) { a2[i]-=10; a2[i-1]++; } } a2[0]+=b2[0]; if (a2[0]>9) { a2[0]-=10; a1[0]++; } p=k; for (i=k-1;i>=0;i--) { if (a2[i]!=0) { p=i; break; } } len=MAX(k1,k2); for (i=0;i<len;i++) { a1[i]+=b1[i]; if (a1[i]>9) { a1[i]-=10; a1[i+1]++; } } for (i=len;i>=0;i--) { if (i==len&&a1[len]==0) continue; printf("%d",a1[i]); } if (p!=k) { printf("."); for (i=0;i<=p;i++) printf("%d",a2[i]); } printf("\n"); } return 0; }