首页 > 技术文章 > 大整数减法

desperate-me 2020-03-30 22:20 原文

大整数减法

描述

求两个大的正整数相减的差。

输入

共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。

输出

一行,即所求的差。

样例输入

9999999999999999999999999999999999999
9999999999999

样例输出

9999999999999999999999990000000000000

代码

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

int main() {
	char a[201], b[201];
	int ans[201];
	memset(ans, 0, sizeof(ans));
	cin >> a >> b;
	int ai = 0, bi = 0, ansi = 0, h = 0;
	while (a[ai] != '\0') ++ai;
	while (b[bi] != '\0') ++bi;
	ai--, bi--;
	while (bi > -1 && ai > -1) {
		if (a[ai] - '0' - h < b[bi] - '0')
			ans[ansi] = 10 + a[ai] - '0' - h - (b[bi] - '0'), h ? h = h : h = 1;
		else
			ans[ansi] = a[ai] - '0' - h - (b[bi] - '0'), h = 0;
		ansi++, ai--, bi--;
	}
	while (ai > -1) {
		if (a[ai] - '0' - h < 0)
			ans[ansi] = 10 + a[ai] - '0' - h, h ? h = h : h = 1;
		else
			ans[ansi] = a[ai] - '0' - h, h = 0;
		++ansi, --ai;
	}
	while (ansi > -1 && ans[ansi] == 0) --ansi;
	while (ansi > -1) cout << ans[ansi--];
	return 0;
}

思路分析

其实这个题的难度是中下,按照常规思路解决即可。

推荐阅读