问题链接(https://codeforces.com/problemset/problem/1064/B)
问题描述
有t个问题,每个问题都有一个a,问满足a−(a⊕x)−x=0的x有多少个。其中⊕为异或运算。
问题分析
第一反应是打表,另外写代码输出从1到a中有哪些数是满足这个式子的,并计数。观察后发现满足式子的x的个数恰好是2的a的二进制数的1的个数次方,count=2n,n为二进制数a的1的个数。
代码如下
#include<bits/stdc++.h>
using namespace std;
int bnum(int x){
int count=0;
while(x){
if(x&1) count++;
x>>=1;
}
return count;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t,a;
cin>>t;
while(t--){
cin>>a;
int num=bnum(a);
cout<<(int)pow(2.0,num)<<endl;
}
return 0;
}