关于第二个点错误只得80分
查看原帖
关于第二个点错误只得80分
43505
晟睿楼主2021/4/13 13:56
#include <iostream>
#include <vector>
using namespace std;

bool bigger(vector<int>a, vector<int>b, int n)
{
	for (int i = 0; i < n; i++)
	{
		if (a[i] > b[i])
		{
			return true;
		}
		else if (b[i] > a[i])
		{
			return false;
		}
		else
		{
			continue;
		}
	}
}

void _Plus(vector<int>x, vector<int>a, vector<int>b, vector<int>& sum, int n)
{
	int tmp;
	for (int i = 0; i < n; i++)
	{
		tmp = a[n - i - 1] + b[n - i - 1];
		if (sum.size() == i)
		{
			sum.push_back(tmp % x[n - i - 1]);
		}
		else
		{
			sum[i] += tmp % x[n - i - 1];
		}
		if (sum.size() == i + 1)
		{
			sum.push_back(tmp / x[n - i - 1]);
		}
		else
		{
			sum[i + 1] += tmp / x[n - i - 1];
		}
	}
	int sumsize = sum.size();
	for (int i = 0; i < sumsize; i++)
	{
		tmp = sum[i];
		if (i != sum.size() - 1)
		{
			sum[i] %= x[n - i - 1];
			sum[i + 1] += tmp / x[n - i - 1];
		}
		else
		{
			sum.push_back(tmp);
		}
	}
	return;
}

void _Minus(vector<int>x, vector<int>a, vector<int>b, vector<int>& sum, int n)
{
	int tmp;
	for (int i = 0; i < n; i++)
	{
		tmp = a[n - i - 1] - b[n - i - 1];
		while (tmp < 0)
		{
			tmp += x[n - i - 1];
			a[n - i - 2]--;
		}
		sum.push_back(tmp);
	}
	int sumsize = sum.size();
	for (int i = 0; i < sumsize; i++)
	{
		tmp = sum[i];
		if (i != sum.size() - 1)
		{
			sum[i] %= x[n - i - 1];
			sum[i + 1] += tmp / x[n - i - 1];
		}
		else
		{
			sum.push_back(tmp);
		}
	}
	return;
}

int main()
{
	// 当两个操作数都是 n 位时,M 为 n + 1 位,a + b < M * 2,所以正常相加只输出 n 位
	int n, tmp;
	vector<int> x, a, b, sum;
	char op;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> tmp;
		x.push_back(tmp);
	}
	for (int i = 0; i < n; i++)
	{
		cin >> tmp;
		a.push_back(tmp);
	}
	cin >> op;
	for (int i = 0; i < n; i++)
	{
		cin >> tmp;
		b.push_back(tmp);
	}

  	if (op == '+')
	{
		_Plus(x, a, b, sum, n);
	}
	else
	{
		if (bigger(a, b, n))
		{
			_Minus(x, a, b, sum, n);
		}
		else
		{
			_Minus(x, b, a, sum, n);
		}
	}

	for (int i = n - 1; i >= 0; i--)
	{
		if (i != 0)
		{
			cout << sum[i] << " ";
		}
		else
		{
			cout << sum[i];
		}
	}
	return 0;
}

我初步怀疑是减法出错了,求解

2021/4/13 13:56
加载中...