嘿嘿,这题我发现了一个bug!!!
查看原帖
嘿嘿,这题我发现了一个bug!!!
339978
大白菜ac楼主2020/7/22 17:10

下面是我AC了但其实是错误的代码。

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

int r[20000], a[20000], b[20000];

bool compare(string s1, string s2) {//判断大小
	if (s1.size() > s2.size())
		return true;
	else if (s1.size() < s2.size())
		return false;
	else
		return s1 >= s2;
}

int main() {
	string s1, s2;
	cin >> s1 >> s2;
	int i;
	bool com = compare(s1, s2);
	if (com) {
		a[0] = s1.size();
		b[0] = s2.size();
		for (i = 0; i < a[0]; i++)
			a[a[0] - i] = s1[i] - '0';
		for (i = 0; i < b[0]; i++)
			b[b[0] - i] = s2[i] - '0';
	}
	else {
		a[0] = s2.size();
		b[0] = s1.size();
		for (i = 0; i < a[0]; i++)
			a[a[0] - i] = s2[i] - '0';
		for (i = 0; i < b[0]; i++)
			b[b[0] - i] = s1[i] - '0';
	}
	for (i = 0; i <= a[0]; i++)
		r[i] = a[i];
	for (i = 1; i <= b[0] + 1; i++) {//做减法,错误就在"i<=b[0]+1",这样10000-999的答案是正确的,但1000000000000-999的答案是错误的
		if (r[i] < b[i]) {
			r[i] += 10;
			r[i + 1]--;
		}
		r[i] -= b[i];
	}
	if (i >= r[0]) {//高位有可能变为0
		while (r[i] == 0 && i >= 1)
			i--;
		if (i == 0)
			r[0] = 1;
		else
			r[0] = i;
	}
	if (com)
		for (i = r[0]; i > 0; i--)
			cout << r[i];
	else {
		cout << "-";
		for (i = r[0]; i > 0; i--)
			cout << r[i];
	}
	return 0;
}

下面是完全正确的(自以为)代码

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

int r[20000], a[20000], b[20000];

bool compare(string s1, string s2) {
	if (s1.size() > s2.size())
		return true;
	else if (s1.size() < s2.size())
		return false;
	else
		return s1 >= s2;
}

int main() {
	string s1, s2;
	cin >> s1 >> s2;
	int i;
	bool com = compare(s1, s2);
	if (com) {
		a[0] = s1.size();
		b[0] = s2.size();
		for (i = 0; i < a[0]; i++)
			a[a[0] - i] = s1[i] - '0';
		for (i = 0; i < b[0]; i++)
			b[b[0] - i] = s2[i] - '0';
	}
	else {
		a[0] = s2.size();
		b[0] = s1.size();
		for (i = 0; i < a[0]; i++)
			a[a[0] - i] = s2[i] - '0';
		for (i = 0; i < b[0]; i++)
			b[b[0] - i] = s1[i] - '0';
	}
	for (i = 0; i <= a[0]; i++)
		r[i] = a[i];
	for (i = 1; i <= r[0]; i++) {//就是改了这个地方
		if (r[i] < b[i]) {
			r[i] += 10;
			r[i + 1]--;
		}
		r[i] -= b[i];
	}
	while (r[i] == 0 && i >= 1)
		i--;
	if (i == 0)
		r[0] = 1;
	else
		r[0] = i;
	if (com)
		for (i = r[0]; i > 0; i--)
			cout << r[i];
	else {
		cout << "-";
		for (i = r[0]; i > 0; i--)
			cout << r[i];
	}
	return 0;
}
2020/7/22 17:10
加载中...