y总写法
/*
Author: SJ
*/
#include <bits/stdc++.h>
using namespace std;
string s1, s2;
vector<int> a, b, c;
vector<int> add(vector<int> &a, vector<int> &b) {
int tmp = 0;
for (int i = 0; i < a.size() || i < b.size(); i++) {
if (i < a.size()) tmp += a[i];
if (i < b.size()) tmp += b[i];
c.push_back(tmp % 10);
tmp /= 10;
}
if (tmp) c.push_back(tmp);
return c;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
cin >> s1 >> s2;
for (int i = 0; i < s1.size(); i++) a.push_back(s1[s1.size() - i - 1] - '0');
for (int i = 0; i < s2.size(); i++) b.push_back(s2[s2.size() - i - 1] - '0');
c = add(a, b);
for (int i = c.size() - 1; i >= 0; i--) cout << c[i];
return 0;
}
我的不用STL的写法
/*
Author: SJ
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N], b[N], c[N];
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
string s1, s2;
cin >> s1 >> s2;
for (int i = 0; i < s1.size(); i++) a[i] = s1[s1.size() - i - 1] - '0';
for (int i = 0; i < s2.size(); i++) b[i] = s2[s2.size() - i - 1] - '0';
int tmp = max(s1.size(), s2.size());
for (int i = 0; i < 2 * tmp; i++) {
c[i] += a[i] + b[i];
if (c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
int mark = 2 * tmp;
for (; mark > 0; mark--) if (c[mark]) break;
for (; mark >= 0; mark--) cout << c[mark];
return 0;
}
不开O2的话速度差异明显,开O2的话好像没有差别
Acwing无O2测试:72ms 32ms
洛谷O2测试:15ms 15ms