题目描述 Description
给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A+B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
15
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
首先,我们可以了解到,位数太多,int和long int 已经无法满足条件,所以我们需要使用字符串来进行计算。
其次,为了方便处理,我们将位数较大的放在前面,然后和减法相同的是将每一对应项相加,然后再进行进位算法,最后将处理好的结果进行输出即可。
代码如下:
#include<iostream>
#include<string>
using namespace std;
void swap(string &a, string &b)
{
string t = a;
a = b;
b = t;
}
int main()
{
string a, b;
cin >> a >> b;
if (a.size() < b.size() || (a.size() == b.size() && a < b)) //将较大的数放在前面
{
swap(a, b);
}
for (int i = 0; i < b.size(); i++) //将对应项进行相加
{
a[a.size() - i - 1] = a[a.size() - i - 1] + b[b.size() - i - 1]-'0';
}
int flag = 0;
for (int i = 1; i <= a.size(); i++)
{
if (a[a.size() - i] > '9') //如果该位大于9,则需要进位,即将该位-10,它的高位即前一位+1
{
a[a.size() - i] -= 10;
int c = a.size() - i - 1;
if (c >= 0)
{
a[a.size() - i - 1] += 1;
}
else
{
flag = 1;
}
}
}
if (flag == 1) //flag用于和超过最高位时需要进位输出1的时候
cout << flag;
for (int i = 0; i < a.size(); i++) //将结果输出
{
cout << a[i];
}
cout << endl;
return 0;
}