当前位置:   article > 正文

笨拙的手指_笨拙的手指c语言

笨拙的手指c语言

题目描述:

       奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字 1414 转换为二进制数,那么正确的结果应为 11101110,但她可能会写下 01100110 或 11111111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 00 的数字。给定贝茜将数字 NN 转换为二进制数字以及三进制数字的结果,请确定 N的正确初始值(十进制表示)。

输入格式:

       第一行包含 N 的二进制表示,其中一位是错误的。

       第二行包含 N 的三进制表示,其中一位是错误的。

输出格式:

        输出正确的 N 的值。

数据范围:

        0≤N≤1000000000,且存在唯一解。

输入样例:

  1. 1010
  2. 212

输出样例:

14

样例解释 :

       1414 在二进制下的正确表示为 11101110,在三进制下的正确表示为 112112。

  1. # include <iostream>
  2. # include <string>
  3. # include<unordered_set>
  4. # include <algorithm>
  5. using namespace std;
  6. int tra(string s,int y)//将字符串中的数字转化为所要求进制的数字
  7. {
  8. int ans = 0;
  9. for(auto c:s)
  10. {
  11. ans = ans * y + c - '0';
  12. }
  13. return ans;
  14. }
  15. int main()
  16. {
  17. string a, b;
  18. cin >> a >> b;
  19. unordered_set<int> S;
  20. for(auto& c:a)//用c遍历字符串a 此处的&符是为了通过c改变a的值
  21. {
  22. c ^= 1;//0的ascll码是48,1是49,48^1是49,49^1是48,从而实现0 1间转化
  23. S.insert(tra(a, 2));
  24. c ^= 1;
  25. }
  26. for(auto& c:b)//此处的&符是为了通过c改变b的值
  27. {
  28. char t = c;
  29. for (int i = 0;i<3;i++)
  30. {
  31. if (i + '0' != t)//使c成为0 1 2中异于自己的数
  32. {
  33. c = i + '0';
  34. int x = tra(b, 3);
  35. if (S.count(x))//在哈希表中寻找x
  36. {
  37. cout << x << endl;
  38. return 0;
  39. }
  40. }
  41. }
  42. c = t;//若未找到,使c返回成原来的数
  43. }
  44. return 0;
  45. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/571485
推荐阅读
相关标签
  

闽ICP备14008679号