题目背景
Bessie刚刚学会了不同进制数之间的转换,但是她总是犯错误,因为她的两个前蹄不能轻松的握住钢笔。
题目描述
每当Bessie将一个数转换成新的进制时,她总会写错一位数字。例如,她将14转化成2进制数,正确的结果是"1110",但她可能会写成"0110"或"1111"。Bessie从不会意外的增加或删减数字,所以她可能会写出以"0"开头的错误数字。
给出Bessie转换后N的2进制形式和3进制形式,请计算出N的正确数值(用十进制表示)。N可能会达到10亿,输入数据保证解的存在唯一性。
输入输出格式
输入格式:
第一行,N的2进制表示(有一位是错误的数字)
第二行,N的3进制表示(有一位是错误的数字)
输出格式:
N的正确值
输入输出样例
输入样例#1: 复制
1010
212
输出样例#1: 复制
14
思路
先求出三进制数所有的错误可能性,用数组装起来,求二进制时,求出一个就进行对比。
俗称:暴力枚举
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string s2,s3;
int x3[101];
int jz(string s,int n)
{
int t=0,u=s.size(),t1=1;
for(int i=u-1;i>=0;i--)
{
t=t+(s[i]-'0')*t1;
t1*=n;
}
return t;
}
int main()
{
cin>>s2>>s3;
int t3=s3.size(),t2=s2.size(),t=0;
for(int i=0;i<t3;i++)
{
char s=s3[i];
for(int j=0;j<=2;j++)
{
s3[i]=char(j+'0');
x3[++t]=jz(s3,3);
}
s3[i]=s;
}
for(int i=0;i<t2;i++)
{
int f;
char s=s2[i];
if(s2[i]=='0')
{
s2[i]=char(1+'0');
f=jz(s2,2);
s2[i]=s;
}
else
{
s2[i]=char(0+'0');
f=jz(s2,2);
s2[i]=s;
}
for(int j=1;j<=t;j++)
{
if(f==x3[j])
{
cout<<f;
return 0;
}
}
}
}```