题目大意:
给出a,要求找出a−(a⊕x)−x=0的非负整数解x的个数
题解:
做的时候打出了表但却没有很快想到正确的规律
只觉得是
2,4,4,8、2,4,4,8、4,8,8,16
2,4,4,8、4,8,8,16
4,8,8,16
16
经提点后才知道,是这个数的二进制中含的1的个数的2倍。
还有一点,异或运算^的优先级很低,要用括号括起来运算。
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define maxx 1005
using namespace std;
#define ll long long
int main()
{
int T;
cin>>T;
while(T--)
{
ll ans=1;
ll a;
cin>>a;
while(a)
{
if(a&1)ans*=2;
a>>=1;
}
cout<<ans<<endl;
}
return 0;
}
打表程序
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{
for(int n=1;n<=1000;++n)
{
ll ans=0;
for(ll j=0;j<=n;++j)
if((n-(n^j))==j)//注意这里^要括起来
ans++;
bitset<20> x(n);
cout<<n<<"---"<<ans<<"------"<<x<<endl;
}
return 0;
}