题意,给定一个函数,由y求x,化为二进制求就行了
#include<iostream>//根据x求y那道题,A了,题很无语,但化为二进制串还是要经常搞得,
//还有有道题字符一个一个读入时T了 ,一行一行读A了,我不晓得为什么,但总之以后要注意,别被这个给卡了
#include<cstring>
using namespace std;
__int64 y,ans;
__int64 temp;
bool a[50],b[50],c[50];
void solve(__int64 x)
{
for(int i=0;i<=45;i++)
{
if(x%2)
a[i]=1;
else
a[i]=0;
x=x/2;
}
}
int main()
{
while(scanf("%I64d",&y)!=EOF)
{
ans=0;
if(y==1)
{
cout<<"1"<<endl;
continue;
}
if(y==0)
{
cout<<"0"<<endl;
continue;
}
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
solve(y);
for(int i=45;i>0;i--)
{
if(a[i])
{
temp=i;
break;
}
}
b[temp]=1;
c[temp]=0;
c[temp-1]=1;
for(int j=temp-1;j>=0;j--)
{
if(a[j])
{
b[j]=!c[j];
c[j-1]=!c[j];
}
else
{
b[j]=c[j];
c[j-1]=c[j];
}
}
for(int j=0;j<=45;j++)
{
//cout<<b[j];
ans+=b[j]*(1<<j);
}
cout<<ans<<endl;
}
return 0;
}