十进制大数的加法运算
输入文件的第一行为一个整数N,表示输入文件中接下来有N组数据,没组数据最多包含100行,每行有一个非常长的十进制整数组成,这个整数的长度不会超过100个字符,而且只包含数字,每组数据的最后一行为0,表示这组数据结束。
对输入文件的每组数据,输出他们的和。
此题不同于两大数相加,是多个大数相加的问题,在求和时,有其独到之处:竖式加法
#include<iostream> #include<stdio.h> #include<string.h> const int M=200; using namespace std; int main(){ char buffer[M]; int array[M][M],answer[M]; int N,maxn,len,num_integers,carry,sum,digit,l; while(cin>>N){ for(int k=1;k<=N;k++){ maxn=-1; memset(array,0,sizeof(array)); memset(answer,0,sizeof(answer)); for(num_integers=0;num_integers<100;num_integers++ ){ gets(buffer); if(strcmp(buffer,"0")==0) break; len=strlen(buffer); if(len>maxn) maxn=len; for(int j=len-1,m=0;j>=0;j--) array[num_integers][m++]=buffer[j]-'0'; } carry=0; for(int i=0;i<maxn+2;i++){ sum=carry; for(int j=0;j<num_integers;j++){ sum+=array[j][i]; digit=sum%10; carry=sum/10; answer[i]=digit; } } for(l=maxn+2;l>=0;l--) if(answer[l]!=0) break; while(l>=0){ cout<<answer[l--]; } cout<<endl; } } return 0; }