#include<bits/stdc++.h>
using namespace std;
char c1[40],c2[40],c[40];
__int128 n1;
int to_ten(__int128 x){
__int128 t=0;
int i=0;
while(x>0){
t+=(x%10)*pow(2,i);
i++;
x/=10;
}
return t;
}
__int128 to_three(int x){
int p[40]={0},i=0;
__int128 t=0;
while(x>0){
i++;
p[i]=x%3;
x/=3;
}
for(;i>=1;i--){
t=t*10+p[i];
}
return t;
}
int log10(__int128 x){
int k=-1;
while(x>0){
x/=10;
k++;
}
return k;
}
//inline void print(__int128 n){
// if(n>9) print(n/10);
// putchar(n%10+'0');
//}
int main(){
cin>>c1>>c2;
for(int i=0;i<strlen(c1);i++){
if(c1[i]=='1')c1[i]='0';
else c1[i]='1';
n1=0;
for(int j=0;j<strlen(c1);j++){
n1=n1*10+c1[j]-'0';
}
// print(n1);
// cout<<endl;
int v=to_ten(n1);
// cout<<v<<endl;
__int128 y=to_three(v);
// print(y);
// cout<<endl;
int k=log10(y);
while(y>0){
c[k]=char(y%10+'0');
k--;
y/=10;
}
// cout<<strlen(c)<<' '<<strlen(c2);
// for(int m=0;m<=3;m++)cout<<c[m]<<' ';
// cout<<endl;
int flag=0,fail=0;
if(strlen(c)!=strlen(c2))goto tiaoguo;
for(int l=0;l<strlen(c)&&l<strlen(c2);l++){
if(flag==1&&c[l]!=c2[l]){
fail=1;
break;
}
else if(c[l]!=c2[l])flag=1;
//cout<<flag<<endl;
}
if(fail==0){cout<<v;return 0;}
tiaoguo:
if(c1[i]=='1')c1[i]='0';
else c1[i]='1';
}
return 0;
}
注释中是我的调试代码 测评记录