Live2D

大整数加法

大整数加法

描述

求两个不超过200位的非负整数的和。

输入

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

输出

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

代码

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char a[250], b[250];
	int ans[250];
	memset(ans, 0, sizeof(ans));
	cin >> a >> b;
	int ai = 0, bi = 0, h = 0, ansi = 0;
	while (a[ai] != '\0') ++ai;
	while (b[bi] != '\0') ++bi;
	ai--, bi--;
	while (ai > -1 && bi > -1) {
		ans[ansi] = (a[ai] - '0' + b[bi] - '0' + h) % 10;
		h = (a[ai] - '0' + b[bi] - '0' + h) / 10;
		ansi++, ai--, bi--;
	}
	while (bi > -1) {
		ans[ansi] = (b[bi] - '0' + h) % 10;
		h = (b[bi] - '0' + h) / 10;
		++ansi, --bi;
	}

	while (ai > -1) {
		ans[ansi] = (a[ai] - '0' + h) % 10;
		h = (a[ai] - '0' + h) / 10;
		++ansi, --ai;
	}
	while (h) {
		ans[ansi] = h % 10;
		h /= 10;
		++ansi;
	}
	while (ansi > -1 && ans[ansi] == 0) --ansi;
	if (ansi == -1) cout << 0;
	while (ansi > -1) cout << ans[ansi--];
	return 0;
}

思路分析

其实这个题的难度是中下,按照常规思路解决即可,需要考虑无非就是前置0两个都为0的特殊情况

posted @ 2020-03-30 21:14  泠月Des  阅读(180)  评论(0)    收藏  举报