NYOJ 103 大数求和A + B

A + B问题二

 时间限制:3000 ms |内存限制:65535 KB|难度:3
描述
我对你有一个非常简单的问题。给定两个整数A和B,你的工作是计算A + B的总和。A,B必须是积极的。
输入
输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。然后是T行,每行包含两个正整数A和B.请注意,整数非常大,这意味着您不应使用32位整数处理它们。你可以假设每个整数的长度不会超过1000。
输出
对于每个测试用例,你应该输出两行。第一行是“Case#:”,#表示测试用例的编号。第二行是等式“A + B = Sum”,Sum表示A + B的结果。注意等式中有一些空格。
样例输入
2
1 2
112233445566778899 998877665544332211
样例输出
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

代码

 #include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[1050],b[1050];
    int c[1050],d[1050],e[1050],n,p;
    cin>>n;
    for(p=1;p<=n;p++)
    {
    cin>>a>>b;
    int m=0,l=0;
    memset(c,0,sizeof(c));
    memset(d,0,sizeof(d));
    memset(e,0,sizeof(e));//全部置0
    for(int i=0;i<strlen(a);i++)//若a=123 即strlen(a)=3
    {
        d[i]=a[strlen(a)-1-i]-'0';//d[0]=a[2]=3,d[1]=a[1]=2,d[2]=a[0]=1,-0是因为字符转化数字
    }
    for(int i=0;i<strlen(b);i++)//b=456
    {
        e[i]=b[strlen(b)-1-i]-'0';
    }
        while(l<=strlen(a)||l<=strlen(b))
        {
            c[l]=d[l]+e[l]+m;//c[0]=d[0]+e[0]+0=3+6=9;即个位数相加
            m=c[l]/10;//m统计进位,如果相加大于10,则m=1
            c[l]=c[l]%10;//c[0]=9
            l++;//从0开始统计最后的和的位数即最大为a或b的长度
        }
        if(m!=0) c[l]=m;//如果最后的进位不为0,则对应的位数等于进位
        else
        {
            l--;
            if(c[l]==0) l=l-1;//如果为0,则不进位
        }
        cout<<"Case "<<p<<":"<<endl;
        cout<<a<<" + "<<b<<" = ";
        for(int j=l;j>=0;j--)
        {
            cout<<c[j];//因为计算时是从各位开始的,所以输出要倒着来
        }
        cout<<endl;
    }
    return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值