解题思路:
每次改变二进制的某一位,转化为10进制后再与三进制的数同样改变一位数做比较
新学算法:秦九韶算法(将b进制数转化为10进制数)
int get(string s,int b)
{
int res=0;
for(int i=0;i<s.size();i++)
{
res=res*b+s[i]-'0';
}
return res;
}
AC代码
#include<bits/stdc++.h>
using namespace std;
int get(string s,int b)
{
int res=0;
for(int i=0;i<s.size();i++)
{
res=res*b+s[i]-'0';
}
return res;
}
int main()
{
string a,s;
cin>>a>>s;
int sum1=0,sum2=0;
for(int i=0;i<a.size();i++)
{
a[i]^=1;//0^1=1,1^1=0
sum1=get(a,2);
a[i]^=1;
for(int j=0;j<s.size();j++)
{
char s1=s[j];
for(int z=0;z<3;z++)
{
if(z+'0'!=s1)
{
s[j]=z+'0';
sum2=get(s,3);
if(sum1==sum2)
{
cout<<sum1<<endl;
return 0;
}
}
}
s[j]=s1;
}
}
return 0;
}