60分,求助
查看原帖
60分,求助
553469
huangsibo楼主2024/10/10 14:28
#include <bits/stdc++.h>
using namespace std;

struct Big {
	int len, num[10105];
	void Number (string s) {
		len = s.size ();
		for (int i = 0; i < len; i ++)
			num[s.size () - i] = s[i] - '0';
	}
	bool operator < (Big a) const {
		if (len != a.len)
			return len < a.len;
		for (int i = len; i >= 1; i --) {
			if (num[i] != a.num[i])
				return num[i] < a.num[i];
		}
		return false;
	}
	void Minus (Big a, Big b) {
		if (a < b) {
			Big c;
			c.Minus (b, a);
			len = c.len;
			num[len + 1] = -1;
			for (int i = 1; i <= len; i ++)
				num[i] = c.num[i];
		}
		else {
			len = max (a.len, b.len);
			for (int i = 1; i <= len; i ++) {
				num[i + 1] --;
				num[i] += 10 + a.num[i] - b.num[i];
				num[i + 1] += num[i] / 10;
				num[i] %= 10; 
			}
			while (len > 1 && num[len] == 0)
				-- len;
		}
	}
	void Print () {
		if (num[len + 1] == -1)
			cout << '-';
		for (int i = len; i >= 1; i --)
			cout << num[i];
	}
};

int main () {
	ios :: sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	string x, y; 
	cin >> x >> y;
	Big a, b;
	a.Number(x);
	b.Number(y);
	Big c;
	c.Minus (a, b); 
	c.Print ();
	return 0;
}

曾经100分,和那个对拍了一下,结果对对拍了半个小时没有一个不对。

2024/10/10 14:28
加载中...