求两个长整数的和,为什么输出的结果总是缺一位呢?


#include <stdio.h>
int main()
{
    char add1[40],add2[40];
    char str1[48],str2[48],str3[50];
    int len,len1,len2,i,j,k;
    printf("被加数:");
    scanf("%s",add1);
    printf("加  数:");
    scanf("%s",add2);
    for(i=0;i<50;i++)
      str3[i]=48;
    for(i=0;i<48;i++)
      str1[i]=48;
    for(i=0;i<48;i++)
      str2[i]=48;
    for(i=0;add1[i]!='\0';i++)
      len1=i;
    for(i=0;add2[i]!='\0';i++)
      len2=i;
    if(len1>len2)
      len=len1;
    else
      len=len2;
    for(i=len1-1;i>=0;i--)
      str1[len-len1+i]=add1[i];
    str1[len]='\0';
    for(i=len2-1;i>=0;i--)
      str2[len-len2+i]=add2[i];
    str2[len]='\0';
    for(i=len-1;i>=0;i--)
    {
        j=(str1[i]-48)+(str2[i]-48)+(str3[i+1]-48);
        if(j>9)
        {
            k=j-10;
            str3[i+1]=k+48;
            str3[i]=str3[i]+1;
        }
        else str3[i+1]=j+48;
    }
    str3[len+1]='\0';
    printf("结  果:");
    if(str3[0]=='0')
      i=1;
    else
      i=0;
    for(j=i;j<=len;j++)
      printf("%c",str3[j]);
    printf("\n");
    return 0; 
}

算len1 len2的时候算错了,应该是

for(i=0;add1[i]!='\0';i++);
len1=i;
for(i=0;add2[i]!='\0';i++);
len2=i;

或者

for(i=0;add1[i]!='\0';i++)
    len1=i+1;
for(i=0;add2[i]!='\0';i++)
    len2=i+1;