[关闭]
@PaulGuan 2016-10-18T12:56:57.000000Z 字数 676 阅读 597

B - Ternary Logic 题解

算法 题解


题目大意

定义一个3进制的运算tor,若 a tor b = c 则 c = (a + b) mod 3 ,现在给出十进制下的a和c,求b。

分析

先转为3进制,再按位tor再转为10进制即可,需要注意字符串的长度判断。

代码

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. vector <int> n1,n2,ans;
  6. int main(void)
  7. {
  8. int a,c,sum=0;
  9. cin>>a>>c;
  10. while(a)
  11. {
  12. n1.push_back(a%3);
  13. a/=3;
  14. }
  15. while(c)
  16. {
  17. n2.push_back(c%3);
  18. c/=3;
  19. }
  20. int i,j=0;
  21. for(i=0;i<min(n1.size(),n2.size());i++)
  22. for(j=0;j<3;j++)
  23. if((n1[i]+j)%3==n2[i])
  24. {
  25. ans.push_back(j);
  26. break;
  27. }
  28. if(n1.size()>n2.size())
  29. for(i=n2.size();i<n1.size();i++)
  30. if(n1[i]==0)
  31. ans.push_back(0);
  32. else
  33. ans.push_back(3-n1[i]);
  34. else
  35. for(i=n1.size();i<n2.size();i++)
  36. ans.push_back(n2[i]);
  37. int base=1;
  38. for(i=0;i<ans.size();i++)
  39. {
  40. sum+=ans[i]*base;
  41. base*=3;
  42. }
  43. cout<<sum<<endl;
  44. return 0;
  45. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注