高精度加法
#include <bits/stdc++.h>
using namespace std;
vector<int> operator+(vector<int> x, vector<int> y)
{
if (x.size() > y.size()) return y + x;
int t = 0;
vector<int> z;
for (int i = 0; i < y.size(); i++)
{
t += y[i];
if (i < x.size())
t += x[i];
z.push_back(t % 10);
t /= 10;
}
if (t)
z.push_back(t);
reverse(z.begin(),z.end());
return z;
}
int main()
{
string a, b;
vector<int> x, y, z;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i--)
x.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i--)
y.push_back(b[i] - '0');
z = x + y;
for (auto i : z)
cout << i;
}
高精度乘法
#include <bits/stdc++.h>
using namespace std;
vector<int> operator*(vector<int> x, vector<int> y)
{
int t = 0;
vector<int> z(x.size() + y.size(), 0);
for (int i = 0; i < x.size(); i++)
for (int j = 0; j < y.size(); j++)
z[i + j] += x[i] * y[j];
for (int i = 0; i < z.size() - 1; i++)
{
z[i + 1] += z[i] / 10;
z[i] %= 10;
}
while (z.size() > 1 && z.back() == 0) z.pop_back();
reverse(z.begin(), z.end());
return z;
}
int main()
{
string a, b;
vector<int> x, y, z;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i--)
x.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i--)
y.push_back(b[i] - '0');
z = x * y;
for (auto i : z)
cout << i;
}