题目含义:
给出一个二进制数,三进制数(这俩数有且一位是错误的)
请输出他们对应的十进制数
问题难点:
其他进制转化为十进制算法
大数据的读入 string
按位异或运算(常用的ACSII码值)
stl集合unordered_set的使用
#include<iostream>
#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;
int get(string s,int b)//将其他进制转化为十进制算法
{
int res=0;
//秦九韶算法
for(auto c:s)
res = res * b + c - '0';//平时所用的进制转换 需要将c(字符)转化为数字
return res;
}
int main()
{
string a,b;
cin>>a>>b;
unordered_set<int> S;
for(auto &c:a)//因为在内部的循环中需要修改某一个字符
{
c^=1;//异或运算 c字符为'48'/'49'与1(二进制的1,前面补齐0)进行按位异或运算 即只有最后一位数字变化
S.insert(get(a,2));
c^=1;//恢复原状
}
for(auto &c:b)
{
char temp=c;
for(int i = 0; i < 3; i ++ )
{
if(i + '0' != c)
{
c=i + '0';
int x=get(b,3);
if(S.count(x))
{
cout<< x <<endl;
return 0;
}
}
c=temp; //如果此时没有找到就恢复原样
}
}
return 0;
}