@PaulGuan
2016-10-18T12:56:57.000000Z
字数 676
阅读 818
算法 题解
定义一个3进制的运算tor,若 a tor b = c 则 c = (a + b) mod 3 ,现在给出十进制下的a和c,求b。
先转为3进制,再按位tor再转为10进制即可,需要注意字符串的长度判断。
#include <iostream>#include <algorithm>#include <vector>using namespace std;vector <int> n1,n2,ans;int main(void){int a,c,sum=0;cin>>a>>c;while(a){n1.push_back(a%3);a/=3;}while(c){n2.push_back(c%3);c/=3;}int i,j=0;for(i=0;i<min(n1.size(),n2.size());i++)for(j=0;j<3;j++)if((n1[i]+j)%3==n2[i]){ans.push_back(j);break;}if(n1.size()>n2.size())for(i=n2.size();i<n1.size();i++)if(n1[i]==0)ans.push_back(0);elseans.push_back(3-n1[i]);elsefor(i=n1.size();i<n2.size();i++)ans.push_back(n2[i]);int base=1;for(i=0;i<ans.size();i++){sum+=ans[i]*base;base*=3;}cout<<sum<<endl;return 0;}