拆位分析一下就OK啦
/* y + (y xor x) */ #include<bits/stdc++.h> #define ll long long using namespace std; int n,k,ans=1; int main(){ scanf("%d%d",&n,&k); for(int i=0;i<=30;i++) if((1<<i)&n) ans<<=1; for(int i=29;i>=0;i--) if(!((1<<i)&n)&&(1<<(i+1))<=k) k-=1<<(i+1); printf("%d\n",k==0?ans:0); return 0; }
原文:https://www.cnblogs.com/JYYHH/p/9940307.html