C++大整数的减法

版权声明:本文为博主原创文章,未经博主允许不得转载。Copyright © 钟波 https://blog.csdn.net/gzu_zb/article/details/89973207
#include <bits/stdc++.h>
using namespace std;

const int maxn = 200 + 10;
typedef long long LL;

string subInfo(char *s1, char *s2) {
	int a[maxn], b[maxn];
	memset(a, 0, sizeof(a));
	memset(b, 0, sizeof(b));
	int len1 = strlen(s1), len2 = strlen(s2);
	int maxLen = max(len1, len2);
	for (int i = 0; i < len1; i++) a[i] = s1[len1 - i - 1] - '0';
	for (int i = 0; i < len2; i++) b[i] = s2[len2 - i - 1] - '0';
	for (int i = 0; i < maxLen; i++) {
		if (a[i] - b[i] < 0) {
			a[i] = a[i] + 10 - b[i];
			a[i + 1] -= 1;
		}
		else a[i] -= b[i];
	}
	string str = "";
	int i;
	for (i = maxLen - 1; i >= 0; i--)if (a[i] != 0)break;
	for (; i >= 0; i--)str += a[i] + '0';
	return str;
}

string bigIntegerSub(char *s1, char *s2) {
	if (s1 == s2)
		return "0"; //相等
	int len1 = strlen(s1), len2 = strlen(s2);
	if (len1 > len2)
		return subInfo(s1, s2);
	else if (len1 < len2)
		return "-" + subInfo(s2, s1); //负数
	else {                        //长度相等时判断大小
		for (int i = 0; i < len1; i++) {
			if (s1[i] - '0' > s2[i] - '0')
				return subInfo(s1, s2);
			else if (s1[i] - '0' < s2[i] - '0')
				return "-" + subInfo(s2, s1);
		}
	}
}

int main() {
	char s1[maxn], s2[maxn];
	scanf("%s\n%s", s1, s2);
	cout << bigIntegerSub(s1, s2) << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gzu_zb/article/details/89973207