题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份,还有carr&&(c[len] = carr)&&(++len);是什么意思?

WA:在屏幕上可以出现正确的结果,不知为何不能AC

#include<stdio.h>
#include<stdlib.h>
#include<cstring>
int main()
{ 
     char str1[1001],str2[1001];
    
     while(scanf("%s %s",str1,str2)!=EOF)
     {
       int a[1001],a1=0,b[1001],b1=0,c[1001],c1=0;
       int i,j;
       for (i=0;str1[i]!='';i++)
          a[a1++]=str1[i]-'0';
          a[a1]=''; 
       for(j=0;str2[j]!='';j++)
          b[b1++]=str2[j]-'0';
          b[b1]='';
       int t=0;//代表进位 
       for (i=a1-1,j=b1-1;i>=0&&j>=0;i--,j--)
           {
                 c[c1++]=(a[i]+b[j]+t)%10;
                 t=(a[i]+b[j]+t)/10; 
           }
     int p;
       if (i>=0) //证明a数组有剩余
       {
           p=t;
           for (i=i;i>=0;i--)
             {
                 c[c1++]=(a[i]+p)%10;
                 p=(a[i]+p)/10; 
             }
       } 
       if (j>=0)  //证明b数组有剩余
       {
         p=t;
           for (j=j;j>=0;j--)
             {
                 c[c1++]=(b[j]+p)%10;
                 p=(b[j]+p)/10; 
             }
       } 
       c[c1++]=p;
       c[c1]='';
       int k=c1-1;
       while(c[k]==0) k--;
       for (k=k;k>=0;k--)
         printf("%d",c[k]);
       printf("
");
       
     }    
     return 0;
      
}

大神的AC代码:

/*
    时间:2014.1.16.22.00
    目的:大数求和 
*/
#include <stdio.h>
#include <string.h>

char a[1001],b[1001];
int c[1001];

int main()
{
    int carr,len_a,len_b,i,j,temp,len;
    while(~scanf("%s %s", a, b))
    {
        carr = len =0;
        len_a = strlen(a);
        len_b = strlen(b);
        for(i = len_a - 1,j = len_b - 1;i >= 0 && j >= 0;i--, --j)
        {
            temp = a[i] - '0' + b[j] - '0' + carr;
            c[len] = temp % 10;
            carr = temp / 10;
            len++;
        }  
        while(i >= 0)
        {
            temp = carr + a[i] - '0';
            c[len] = temp % 10;
            carr = temp / 10;
            i--;
            len++;
        }
    //    carr&&(c[len] = carr)&&(++len);此处我重复了一次 导致WA  因为当输出8 4 时  输出为112,多输出了一个1 
        while(j >= 0)
        {
            temp = carr + b[j] - '0';
            c[len] = temp % 10;
            carr = temp / 10;
            j--;
            len++;
        }
        carr&&(c[len] = carr)&&(++len);//这到底是什么什么意思???????
        for(--len;len>=0;--len)
        printf("%d", c[len]);
        printf("
");
    }
    return 0;
} 
/*
输出结果: 
---------------------
2 6                                            思路: 1.由于数很大,必须用字符串存取 
8                                                   2.注意a,b串是从大高位到低位存储,故数字的最低位在串的最高位        
10000000000000000000 100000000000000000000000000000003.c串的输出时高位到低位的输出 
10000000000010000000000000000000
---------------------
*/ 
原文地址:https://www.cnblogs.com/jianrenguo/p/6538630.html