1151: 大整数加法

题目描述

比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

 

输入

输入数据有多组。首先输入一个整数T,表示有T组输入。

每组输入两个大整数,并用空格隔开。每个整数最多1000位。没有负数输入。

 

输出

对于每组输入,输出两个整数的和,单独占一行。

 

样例输入

2
1 2
112233445566778899 998877665544332211

 

样例输出

3
1111111111111111110
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    cin >> t;
    string s;
    while (t--)
    {
        string a, b;
        cin >> a >> b;
        if (a.size()<b.size())
            swap(a, b);
        int len = a.size() - b.size();
        if (len){
            string b2(len, '0');
            b = b2 + b;
        }//补齐,不够用零。
        s = a;
        int carry = 0;
        //reverse(a.begin(), a.end());
        //reverse(b.begin(), b.end());刚开始想反转在加,到最后解决不了最后一个进位,所以没办法。
        for (int i = a.size() - 1; i >= 0; i--)
        {
            s[i] = (a[i] - '0' + b[i] - '0' + carry) % 10 + '0';
            carry = (a[i] - '0' + b[i] - '0' + carry) / 10;
        }//这个加零和减零,特别容易弄混。-‘0’是字符转数字,+‘0’是字符转数字;亦可调用stoic(),不过需要c.str()函数与string与char的转换。
        //reverse(s.begin(),s.end());
        if (carry>0)
        {
            s = "1" + s;
        }
        //
        cout << s << endl;
    }
    return 0;
}//我没用弄明白那个定义变量与{}是否有关系,应该是有关系。

 

posted @ 2018-09-25 21:23  Binary_tony  阅读(338)  评论(0编辑  收藏  举报