Book--大数加法

 这里有两种大数加法的算法,采集自hdu1002和hdu1250


1:hdu1002

#include<stdio.h>
#include<string.h>
int main(){
      int a[1002]={0},b[1002]={0},c[1002]={0};
      int i,n,k,alen,blen,r=0;
      char str1[1002],str2[1002];
      scanf("%d",&n);
      while(n--){
          if(r>0) printf("\n");
          scanf("%s",str1);
          alen=strlen(str1); 
          scanf("%s",str2);
          blen=strlen(str2);
          k=alen>blen?alen:blen;
         for(i=0;i<alen;i++)
              a[i]=str1[alen-i-1]-'0';
         for(i=0;i<blen;i++)
              b[i]=str2[blen-i-1]-'0';
         for(i=0;i<k;i++){
              c[i]=a[i]+b[i]+c[i];
              c[i+1]=c[i]/10;
              c[i]=c[i]%10;
         }
          if(c[i])
               k++;
          r++;
          printf("Case %d:\n",r);
          printf("%s + %s = ",str1,str2);
          for(i=k-1;i>=0;i--)
                printf("%d",c[i]);
          printf("\n");
          memset(a,0,sizeof(a));
          memset(b,0,sizeof(b));
          memset(c,0,sizeof(c));
}
return 0;
}

 

 


2:

#include<stdio.h>
long a[8000][800];
int main(){
    long n,i,j,k;
    a[1][0]=1;
    a[2][0]=1;
    a[3][0]=1;
    a[4][0]=1;
     k=0;
    for(i=5;i<8000;i++)
        for(j=0;j<800;j++){
            k+=a[i-1][j]+a[i-2][j]+a[i-3][j]+a[i-4][j];
            a[i][j]=k%10000;
            k/=10000;
        }
    while(k){
        a[i][j++]=k%10000;
        k/=10000;
    }
    while(scanf("%ld",&n)>0){
        for(i=799;i>=0;i--)
            if(a[n][i]!=0)break;
        printf("%ld",a[n][i]);
        for(i--;i>=0;i--)
            printf("%4.4ld",a[n][i]);printf("\n");
    }
return 0;
} 

 

posted @ 2014-05-27 20:57  Naturain  阅读(110)  评论(0编辑  收藏  举报