总体思路:搞两个for循环,每个for循环的意思是如果这个数就是错的那个数,然后改过来不就香了吗?
#include<bits/stdc++.h>
#define LL long long
using namespace std;
string a, b;
LL ans;
LL sa, sb;
int main () {
cin >> a >> b;
for (int i = a.size () - 1; i >= 0; i--) sa = sa + (a[i] - '0') * (pow (2, a.size () - i - 1));
for (int i = b.size () - 1; i >= 0; i--) sb = sb + (b[i] - '0') * (pow (3, b.size () - i - 1));
for (int i = 0; i < a.size (); i++)
for (int j = 0; j < b.size (); j++) {
int aa = a[i] - '0';
int bb = b[j] - '0';
LL ans_a = sa, ans_b_1 = sb, ans_b_2 = sb;
if (aa == 1) ans_a -= (pow (2, a.size () - 1 - i));
else ans_a += (pow (2, a.size () - 1 - i));
if (bb == 0) {
ans_b_1 += (pow (3, b.size () - 1 - j));
ans_b_2 = ans_b_2 + 2 * (pow (3, b.size () - 1 - j));
}
else if (bb == 1) {
ans_b_1 -= (pow (3, b.size () - 1 - j));
ans_b_2 += (pow (3, b.size () - 1 - j));
}
else if (bb == 2) {
ans_b_1 -= (pow (3, b.size () - 1 - j));
ans_b_2 = ans_b_2 - 2 * (pow (3, b.size () - 1 - j));
}
if (ans_a == ans_b_1 || ans_a == ans_b_2) {
cout << ans_a << endl;
return 0;
}
}
return 0;
}