@PaulGuan
2016-10-18T20:56:57.000000Z
字数 676
阅读 678
算法
题解
定义一个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);
else
ans.push_back(3-n1[i]);
else
for(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;
}