大整数A+B

输入两个整数A、B,求 A + B。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入2个正整数A、B。整数可能很大,但每个整数的位数不会超过1000

输出格式:

对于每组测试输出两行数据;第一行输出"Case #:",#表示测试组号,第二行输出形式为“A + B = Sum”,Sum表示A+B的结果。每两组测试数据之间空一行

输入样例:

2
1 2
88888888888888888888888 11111111111111111111111

输出样例:

Case 1:
1 + 2 = 3

Case 2:
88888888888888888888888 + 11111111111111111111111 = 9999999999999999999

思路:

  1. 数字位数极多,用字符串读入

  1. 利用vector容器

  1. 将两个字符串逆序相加,如果t>10,向前进1,如果t<10,则不管

  1. 得到的结果逆序输出

注意:

1.每两组测试数据之间空一行:ans表示次数,ans不等于0时会空一行,ans等于0时,不会空行

代码:

#include<iostream>
#include<vector>
using namespace std;
vector<int>add(vector<int>&A,vector<int>&B)
{
    vector<int>C;
    int i,t=0;
    for(i=0;i<A.size()||i<B.size();i++)
    {
        if(i<A.size())
           t+=A[i];
        if(i<B.size())
           t+=B[i];
        C.push_back(t%10);
        t=t/10;
    }
    if(t)
       C.push_back(1);
    return C;
}
int main()
{
    int ans,k,i;
    cin>>ans;
    k=ans;
    while(ans--)
    {
        printf("Case %d:\n",k-ans);
        string a,b;
        vector<int>A,B;
        cin>>a>>b;
        for(i=0;i<a.size();i++)
            printf("%c",a[i]);
        printf(" + ");
        for(i=0;i<b.size();i++)
            printf("%c",b[i]);
        printf(" = ");
        for(i=a.size()-1;i>=0;i--)
            A.push_back(a[i]-'0');
        for(i=b.size()-1;i>=0;i--)
            B.push_back(b[i]-'0');
        vector<int>C=add(A,B);
        for(i=C.size()-1;i>=0;i--)
            printf("%d",C[i]);
        printf("\n");
        if(ans!=0)
           printf("\n");
    }
    return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值