这题要模拟在二进制上错了哪一位,如果这一位是0,则改为1判断一次,否则改为0判断一次。注意判断完后要修改回来。
#include <bits/stdc++.h>
using namespace std;
string a, b;
long long x, l1, l2;
void q() {
x = 0; int i = 0;
while (i < l1) x <<= 1, x += a[i++] - '0';
int j = l2 - 1, f = 0;
int ans = x;
while (x && f < 2) {
if (x % 3 != b[j] - '0') f++;
x /= 3; j--;
}
while(b[j] == '0') j--;
if (f < 2 && j < 0) { printf("%d", ans); return; }
}
int main() {
cin >> a >> b;
l1 = a.size();
l2 = b.size();
for (int i = l1 - 1;i >= 0; i--)
if (a[i] == '0') a[i] = '1', q(), a[i] = '0';
else a[i] = '0', q(), a[i] = '1';
return 0;
}