如果把这个题做好了,那么下一个题加法部分可以直接c + v。
因为我是倒着做的,所以我用的是1024的😁
#include <bits/stdc++.h>
using namespace std;
string Add (string a, string b) {
int flag = 0;
for (int i = a.size() - 1; i >= 0; i--) {
int u = a[i] - '0', v = b[i] - '0';
// cout << u << " " << v << endl;
if (u + v + flag > 9) {
a[i] = '0' + (u + v + flag) % 10;
flag = 1;
continue;
}
a[i] = '0' + (u + v + flag) % 10;
flag = 0;
// cout << a << endl;
}
if (flag == 1) a.insert(0, "1");
return a;
}
int main() {
unordered_map<char, int> m1, m2;
string s, a;
int flag = 0;
cin >> s;
a = Add (s, s);
if (a.size() != s.size()) {
printf ("No\n%s", a.c_str());
return 0;
}
for (int i = 0; i < a.size(); i++) m1[a[i]]++;
for (int i = 0; i < s.size(); i++) m2[s[i]]++;
for (auto it : m1) {
if (m2[it.first] != it.second) {
flag = 1;
break;
}
}
if (flag == 0) printf ("Yes\n%s", a.c_str());
else printf ("No\n%s", a.c_str());
}