杭电1047——大数相加

Posted 栽种绝处的花

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电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]=‘\0‘;
    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]={‘\0‘},ch[1000];
  char data[1000];
  int n;
  scanf("%d",&n);
  while(n--)
  {
      strcpy(sum,"\0");
      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\n",sum);
      if(n!=0)//注意格式   
        printf("\n");  
  }    
}

以上是关于杭电1047——大数相加的主要内容,如果未能解决你的问题,请参考以下文章

HDU1047(多个大数相加)

大数相加(类似杭电acm1002)

HDU 1047 Integer Inquiry 大数相加 string解法

1047 Integer Inquiry

#yyds干货盘点#JS两个大数相加

(大数 string) Integer Inquiry hdu1047