杭电1047——大数相加

#include <stdio.h>
#include <string.h>
void add(char d1[],char d2[],char sum[])
{
    int i,j,carry=0,inx,idx1,idx2,t;
    
    inx=0;
    idx1=strlen(d1)-1;
    idx2=strlen(d2)-1;
    
    carry=0;
    while(idx1>=0&&idx2>=0)
    {
        sum[inx++]=(d1[idx1]-'0'+d2[idx2]-'0'+carry)%10+'0';
        carry=(d1[idx1]-'0'+d2[idx2]-'0'+carry)/10;
        idx1--,idx2--;
    }
    while(idx1>=0)
    {
        sum[inx++]=(d1[idx1]-'0'+carry)%10+'0';
        carry=(d1[idx1]-'0'+carry)/10;
        idx1--;
    }
    while(idx2>=0)
    {
        sum[inx++]=(d2[idx2]-'0'+carry)%10+'0';
        carry=(d2[idx2]-'0'+carry)/10;
        idx2--;
    }
    while(carry>0)
    {
        sum[inx++]=carry%10+'0';
        carry=carry/10;
    }        
    sum[inx]='';
    for(i=0,j=strlen(sum)-1;i<j;i++,j--)
    {
        t=sum[i];
        sum[i]=sum[j];
        sum[j]=t;
    }    
    int flag=0;
    for(i=0;i<strlen(sum);i++)
    {
        if(sum[i]!='0')
        {    flag=1;break;}
    }
    if(flag==0) 
        strcpy(sum,"0");         
}
void main()
{
  char sum[1000]={''},ch[1000];
  char data[1000];
  int n;
  scanf("%d",&n);
  while(n--)
  {
      strcpy(sum,"");
      while(scanf("%s",ch)!=EOF&&strcmp(ch,"0")!=0)  
      {          
          if(strlen(ch)>0)
          {
              if(strlen(sum)==0)
              {
                  strcpy(sum,ch);
              }
              else
              {
                  strcpy(data,sum);
                  add(data,ch,sum);
              }
          }
      }
      if(strlen(sum)==0)
            strcpy(sum,"0");
        printf("%s
",sum);
      if(n!=0)//注意格式   
        printf("
");  
  }    
}
原文地址:https://www.cnblogs.com/MarsMercury/p/8167799.html