P1601 A+B Problem(高精)

212 阅读1分钟

 

题目描述

高精度加法,相当于 a+b problem,不用考虑负数

输入格式

分两行输入。a,b≤10500a,b \leq 10^{500}a,b≤10500。

输出格式

输出只有一行,代表 a+ba+ba+b 的值。

输入输出样例

输入 #1

1
1

输出 #1

2

输入 #2

1001
9099

输出 #2

10100

思路:

如同我们手算一样,从最低位开始计算,对10取余作为当前一位,除以10向前进位。

用vector储存要倒着存。

代码:

#include<bits/stdc++.h>
using namespace std;

vector<int> add(vector<int>& A, vector<int>& B) {
	if (A.size() < B.size()) return add(B, A);

	vector<int> C;
	int t = 0;
	for (int i = 0; i < A.size(); i++) {
		t += A[i];
		if (i < B.size()) {
			t += B[i];
		}
		C.push_back(t % 10);
		t /= 10;
	}
	if (t)C.push_back(t);
	return C;
}

int main() {
	string a, b;
	cin >> a >> b;
	vector<int> A, B,C;
	for (int i = a.size()-1; i >= 0; i--) A.push_back(a[i] - '0');
	for (int i = b.size()-1; i >= 0; i--) B.push_back(b[i] - '0');
	C = add(A, B);
	for (int i = C.size()-1; i >= 0; i--) cout<<C[i];
	return 0;
}