#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;
}
我初步怀疑是减法出错了,求解