大数加法(小数情况)

话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。 
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。 

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。 

Input本题目包含多组测试数据,请处理到文件结束。 
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。Output请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。 
Sample Input

1.1 2.9
1.1111111111 2.3444323343
1 1.1

Sample Output

4
3.4555434454
2.1

说真的,= =不得不吐槽一下出题人,题目都说了正的小数A和B,那为什么有整数情况,第一个代码纪念一下把A B都当成整数的情况

#include
#include
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;imedian2)
            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=0;i--)
            printf("%d",str6[i]);
           printf(".");
        for(i=0;i

第二个代码

#include
#include
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;im2)
        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=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

 

 

 

你可能感兴趣的:(大数(c\c++))