赞
踩
题目描述:
奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字 1414 转换为二进制数,那么正确的结果应为 11101110,但她可能会写下 01100110 或 11111111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 00 的数字。给定贝茜将数字 NN 转换为二进制数字以及三进制数字的结果,请确定 N的正确初始值(十进制表示)。
输入格式:
第一行包含 N 的二进制表示,其中一位是错误的。
第二行包含 N 的三进制表示,其中一位是错误的。
输出格式:
输出正确的 N 的值。
数据范围:
0≤N≤1000000000,且存在唯一解。
输入样例:
- 1010
- 212
输出样例:
14
样例解释 :
1414 在二进制下的正确表示为 11101110,在三进制下的正确表示为 112112。
- # include <iostream>
- # include <string>
- # include<unordered_set>
- # include <algorithm>
- using namespace std;
- int tra(string s,int y)//将字符串中的数字转化为所要求进制的数字
- {
- int ans = 0;
- for(auto c:s)
- {
- ans = ans * y + c - '0';
- }
- return ans;
- }
- int main()
- {
- string a, b;
- cin >> a >> b;
-
- unordered_set<int> S;
-
- for(auto& c:a)//用c遍历字符串a 此处的&符是为了通过c改变a的值
- {
- c ^= 1;//0的ascll码是48,1是49,48^1是49,49^1是48,从而实现0 1间转化
- S.insert(tra(a, 2));
- c ^= 1;
- }
- for(auto& c:b)//此处的&符是为了通过c改变b的值
- {
- char t = c;
- for (int i = 0;i<3;i++)
- {
- if (i + '0' != t)//使c成为0 1 2中异于自己的数
- {
- c = i + '0';
- int x = tra(b, 3);
- if (S.count(x))//在哈希表中寻找x
- {
- cout << x << endl;
- return 0;
- }
- }
- }
- c = t;//若未找到,使c返回成原来的数
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。