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; }