题目链接
题意:两个整数a,b满足a+b=s,a^b=x,求满足条件的a,b的数目
思路:这道题又涨新知识了,有个结论a+b=a^b+(a&b)*2,异或运算其实可以看做没有进位的加法,那么设s-x为d,很显然d从二进制角度来看的话,d如果第i位为1,就代表a+b的第i-1位产生了进位(我这里是从右往左看,最右边为第一位),那么如果d的第i为为0,就代表a和b的第i-1位为不同的,要么0要么1,贡献是2,再根据乘法原理累加答案就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll s,x,ans=1;
int main()
{
scanf("%lld %lld",&s,&x);
ll d=s-x;
if(s<x||(d&1)) {
printf("0\n");return 0;
}
for(int i=1;i<=60;++i)
{
if((x>>i-1&1)&&(d>>i&1)==0) ans<<=1;
if((x>>i-1&1)&&(d>>i&1)) {
printf("0\n");return 0;
}
}
if(!d) ans-=2;
printf("%lld\n",ans);
}