大数加法

题目描述:

十进制大数的加法运算。

输入描述:

输入文件的第1行为一个整数N,表示输入文件中接下来有N组数据。每组数据最多包含100行。每一行由一个非常长的十进制整数组成,这个整数的长度不会超过100个字符而且只包含数字,每组数据的最后一行为0,表示这组数据结束。

每组数据之间有一个空行。

输出描述:

输入文件中的每组数据输出它们的和。每两组数据的输出之间有一个空行。

样例输入:

1

99999278961257987

126792340765189

998954329065419876

432906541

23

0

样例输出:

1099080400800349616

#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    char buffer[200];//输入的数字
    int array[200][200];//逆序存储每个数字
    int ans[200];
    int i,j,k;//循环变量
    int num_integers;//数字个数
    int len,maxlen=0;//数字长度、最长数字的长度
    int sum,carry=0,digit;//每位求和后的总和、进位和结果
    int n;//测试数据数
    scanf("%d",&n);
    while(n--)
    {
        memset(buffer,0,sizeof(buffer));
        memset(array,0,sizeof(array));
        memset(ans,0,sizeof(ans));
        for(num_integers=0;num_integers<200;num_integers++)
        {
            gets(buffer);
            if(strcmp(buffer,"0")==0) break;
            len=strlen(buffer);
            if(len>maxlen) maxlen=len;
            for(i=0;i<len;i++)
            {
                array[num_integers][i]=buffer[len-1-i]-'0';
                //printf("%d",array[num_integers][i]);
            }
        }
        for(j=0;j<maxlen+2;j++)
        {
            sum=carry;
            for(k=0;k<num_integers;k++)
                sum+=array[k][j];
            carry=sum/10;
            digit=sum%10;
            ans[j]=digit;
            //printf("%d",ans[j]);

        }
        for(i=maxlen+2;i>=0;i--)
        {
            if(ans[i]!=0) break;
        }
        while(i>=0) printf("%d",ans[i--]);
        puts("\n");
    }
    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值