大数求和

来源:互联网 发布:删除建立的属性列sql 编辑:程序博客网 时间:2024/05/16 13:46

题目链接:http://zju.acmclub.com/index.php?app=problem_title&id=1&problem_id=1091

给定几个大数,求出和并输出。

123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890

算出:370370367037037036703703703670

需要注意的几项有:

1.显然要先以字符串的形式来读入,我使用的是二维矩阵。

2.注意位数的对齐,我用的方法是从后往前逐位计算。例如123,1,1,三个数在矩阵中分别存成321,100,100的形式。

3.注意进位,例如9+9+9=27,7保存在数组中,2向下一次计算进位。

4.最高位需要单独处理,最高位得到的数直接保存在数组中即可。

cpp代码:

#include<iostream>#include<cstring>#define SIZE 100using namespace std;int main(){    int mat[SIZE][SIZE];    char str[SIZE];    int result[SIZE];    int n,i,j,row,col,MAX_col;    cin>>n;    while(n--){        row = 0;MAX_col=0;        while(1){            cin>>str;            if(!strcmp(str,"0"))break;            if(strlen(str)>MAX_col)MAX_col=strlen(str);            col=0;            for(j=strlen(str)-1;j>=0;j--){                mat[row][col++]=str[j]-'0';            }            row++;        }        //compute "ADD"        int pos=0,flag=0,digit;        for(j=0;j<MAX_col-1;j++){            digit=0;            for(i=0;i<row;i++){                digit+=mat[i][j];            }            digit+=flag;            result[pos++]=digit%10;            flag=digit/10;        }        //process top-digit alone        digit=0;        j=MAX_col-1;        for(i=0;i<row;i++){            digit+=mat[i][j];        }        digit+=flag;        result[pos++]=digit;        for(i=pos-1;i>=0;i--)cout<<result[i];        cout<<endl<<endl;    }    return 0;}


0 0