话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做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
说真的,= =不得不吐槽一下出题人,题目都说了正的小数A和B,那为什么有整数情况,第一个代码纪念一下把A B都当成小数的情况
#include<stdio.h> #include<string.h> char a[401],b[401]; int str1[401],str2[401],str3[401],str4[401],str5[401],str6[401]; int main() { int len1,len2,i,median1,median2,k2,k1,max1,max2; while(scanf("%s%s",a,b)!=EOF) { memset(str1,0,sizeof(str1)); memset(str2,0,sizeof(str2)); memset(str3,0,sizeof(str3)); memset(str4,0,sizeof(str4)); memset(str5,0,sizeof(str5)); memset(str6,0,sizeof(str6)); len1=strlen(a); len2=strlen(b); for(i=0;i<len1;i++) if(a[i]=='.') median1=i; for(i=0;i<len2;i++) if(b[i]=='.') median2=i; for(i=0;i<median1;i++) str1[i]=a[median1-1-i]-'0'; for(i=0;i<len1-median1-1;i++) str2[i]=a[median1+1+i]-'0'; for(i=0;i<median2;i++) str3[i]=b[median2-1-i]-'0'; for(i=0;i<len2-median2-1;i++) str4[i]=b[median2+1+i]-'0'; if(median1>median2) max1=median1; else max1=median2; if(len1-1-median1>len2-1-median2) max2=len1-median1-1; else max2=len2-median2-1; k2=0; for(i=max2-1;i>=0;i--) { str5[i]=(str2[i]+str4[i]+k2)%10; k2=(str2[i]+str4[i]+k2)/10; } if(k2!=0) str5[max2]=1; k1=0; for(i=0;i<max1;i++) { str6[i]=str5[max2]+(str1[i]+str3[i]+k1)%10; k1=(str1[i]+str3[i]+k1)/10; str5[max2]=0; } if(k1!=0) str6[max1]=1; for(i=max1-1;i>=0;i--) printf("%d",str6[i]); printf("."); for(i=0;i<max2;i++) printf("%d",str5[i]); printf("\n"); } return 0; }
第二个代码
#include<stdio.h> #include<string.h> char a[410],b[410]; int s1[410],s11[410],s2[410],s22[410],s3[410],s33[410]; int main() { int len1,len2,i,j,m1,m2,max1,max2,k; while(scanf("%s%s",a,b)!=EOF) { memset(s1,0,sizeof(s1)); memset(s11,0,sizeof(s11)); memset(s2,0,sizeof(s2)); memset(s22,0,sizeof(s22)); m1=len1=strlen(a); m2=len2=strlen(b); for(i=0;i<len1;i++) if(a[i]=='.') m1=i; for(i=0;i<len2;i++) if(b[i]=='.') m2=i; for(i=0,j=m1-1;i<m1;i++,j--) s1[i]=a[j]-'0'; for(i=m1+1,j=0;i<len1;i++,j++) s11[j]=a[i]-'0'; for(i=0,j=m2-1;i<m2;i++,j--) s2[i]=b[j]-'0'; for(i=m2+1,j=0;i<len2;i++,j++) s22[j]=b[i]-'0'; max1=max2=0; if(m1>m2) max1=m1; else max1=m2; if((len1-m1)>(len2-m2)) max2=len1-m1; else max2=len2-m2; k=0; for(i=max2-1;i>=0;i--) { s33[i]=(s11[i]+s22[i]+k)%10; k=(s22[i]+s11[i]+k)/10; } for(i=0;i<max1;i++) { s3[i]=(s1[i]+s2[i]+k)%10; k=(s1[i]+s2[i]+k)/10; } if(k!=0) printf("1"); for(i=max1-1;i>=0;i--) printf("%d",s3[i]); while(s33[max2-1]==0) { if(s33[max2-1]==0) max2--; } if(max2>0) printf("."); for(i=0;i<max2;i++) printf("%d",s33[i]); printf("\n"); } return 0; }