高精A+B Problem

发布时间 2023-11-12 23:15:32作者: 拍手称快
#include <iostream>
#include <cstdio>

using namespace std;
int c[100000];
int d[100000];
int e[100000];

int main() {
	string a, b;
	cin >> a >> b;
	if (a == "0") {
		cout << b;
		return 0;
	}
	if (b == "0") {
		cout << a;
		return 0;
	}
	for (int i = a.length() - 1; i >= 0; i--) {
		c[i + 1] = a[i] - '0';

	}
	for (int i = b.length() - 1; i >= 0; i--) {
		d[i + 1] = b[i] - '0';
	}
	if (a.length() >= b.length()) {
		for (int i = a.length()  ; i > a.length() - b.length(); i--) {
			if (e[i + 1] + c[i ] + d[i - a.length() + b.length() ] >= 10) {
				e[i + 1] += c[i ] + d[i - a.length() + b.length() ] - 10;
				e[i ]++;

			} else {
				e[i + 1] += c[i ] + d[i - a.length() + b.length() ];
			}
		}
		for (int i = a.length() - b.length() ; i >= 0; i--) {
			if (e[i + 1] + c[i  ] >= 10) {
				e[i + 1] += c[i ]  - 10;
				e[i ]++;
			} else {
				e[i + 1] += c[i ];
			}

		}
		int num = 0;
		while (e[num] == 0) {
			num++;
		}
		for (int i = num; i <= a.length() + 1; i++) {
			cout << e[i];
		}
	} else {
		for (int i = b.length()  ; i > b.length() - a.length(); i--) {
			if (e[i + 1] + c[i - b.length() + a.length()] + d[i] >= 10) {
				e[i + 1] += c[i - b.length() + a.length()] + d[i] - 10;
				e[i ]++;
			} else {
				e[i + 1] += c[i - b.length() + a.length()] + d[i];
			}
		}
		for (int i = b.length() - a.length() ; i >= 0; i--) {
			if (e[i + 1] + d[i  ] >= 10) {
				e[i + 1] += d[i ] - 10;
				e[i ]++;
			} else {
				e[i + 1] += d[i ];
			}

		}
		int num = 0;
		while (e[num] == 0) {
			num++;
		}
		for (int i = num; i <= b.length() + 1; i++) {
			cout << e[i];
		}
	}

	return 0;
}

  这是关于高精度加法的第一次尝试。