// -------------------------- 高精度加法 -------------------------
vector<char> Add(const string &a, const string &b)
{
vector<char> c;
int t = 0;
for (int i = a.size()-1, j = b.size()-1; i >= 0 || j >= 0;--i, --j)
{
if (i >= 0) t += a[i] - '0';
if (j >= 0) t += b[j] - '0';
c.push_back(t%10 + '0'), t /= 10;
}
if (t) c.push_back(t + '0');
return c;
}
// ----------------------------- add 纯c--------------------
// char a[N], b[N], c[N];
// int Add()
// {
// int na = strlen(a)-1, nb = strlen(b)-1;
// int t = 0, k = 0;
// for (int i = na, j = nb; i >= 0 || j >= 0; --i, --j)
// {
// if (i >= 0) t += a[i] - '0';
// if (j >= 0) t += b[j] - '0';
// c[k++] = (t%10) + '0', t /= 10;
// }
// if (t) c[k++] = t + '0';
// return k;
// }
// ------------------------------ 高精度减法 -----------------------
// C = A - B, 满足A >= B, A >= 0, B >= 0
// 判断 A >= B
inline bool cmp(const string &a, const string &b)
{
int na = a.size(), nb = b.size();
if (na != nb) return na > nb;
for (int i = 0, j = 0; i < na; ++i, ++j)
if (a[i] != b[j])
return a[i] > b[j];
return 1;
}
vector<char> Sub(string &a, string &b, bool p)
{
if (!cmp(a, b)) return Sub(b, a, 1);
vector<char> c;
int t = 0;
// 借位
for (int i = a.size()-1, j = b.size()-1; i >= 0; --i)
{
t = a[i] - '0' - t;
if (j >= 0) t -= b[j--] - '0';
// t + 10 表示 t借位(t 此时小于 0)
c.push_back((t+10)%10 + '0');
if (t < 0) t = 1;
else t = 0;
}
while (c.size() > 1 && c.back() == '0') c.pop_back();
if (p) c.push_back('-');
return c;
}
注意输出顺序
int main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
string a, b; cin >> a >> b;
// add
auto c = Add(a, b);
for (int i = c.size()-1; i >= 0; --i) cout << c[i];
// int n = Add();
// for (int i = n-1; i >= 0; --i) putchar(c[i]);
// sub
auto c = Sub(a, b, 0);
int n = c.size();
for (int i = n-1; i >= 0; --i) putchar(c[i]);
return 0;
}