C++高精度加法

51 阅读1分钟
#include <bits/stdc++.h>

using i64 = long long;

std::vector<int> add(std::vector<int> &A, std::vector<int> &B) {
	std::vector<int> C;// A + B
	int carry = 0;// 表示进位

	for (int i = 0; i < A.size() || i < B.size(); i ++) {
		if (i < A.size()) {
			carry += A[i];
		}
		if (i < B.size()) {
			carry += B[i];
		}// 逐位相加,包括进位

		C.push_back(carry % 10);// 获取当前数位的值
		carry /= 10;// 抹去个位数字
	}

	if (carry) {
		C.push_back(1);
	}// 进位处理

	return C;
}

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::string a, b;// a = 654321, b = 123456
	std::cin >> a >> b;

	std::vector<int> A, B;// A = [1, 2, 3, 4, 5, 6], B = [6, 5, 4, 3, 2, 1]
	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');
	}

	auto C = add(A, B);// C = [7, 7, 7, 7, 7, 7]
	for (int i = C.size() - 1; i >= 0; i --) {
		std::cout << C[i];
	}

	return 0;
}