题意:给定一个数,它的二进制形式中包含多少个’a’
‘a’的 ASCII码为97,且字符’a’占8个二进制位,97的二进制形式为01100001
因此只要打印出每个数的二进制位,每8位为一个区间,比较这个区间与97的二进制区间是否相同,统计相同数即可;
需要注意的是该题打印二进制码是逆序;
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int digit[40];
int adigit[9]{0,1,0,0,0,0,1,1,0};
int main(){
ll n;
while(~scanf("%lld",&n)){
ll ans=0;
while(n--){
ll a;
scanf("%lld",&a);
int cnt=1;
while(a/2){
digit[cnt++]=a&1;
a=a>>1;
}
digit[cnt]=a;
for(int i=cnt+1;i<=32;i++) digit[i]=0;
for(int i=1;i<=8;i++){
if(digit[i]!=adigit[i]){
break;
}
if(i==8) ans++;
}
for(int i=9;i<=16;i++){
if(digit[i]!=adigit[i-8]){
break;
}
if(i==16) ans++;
}
for(int i=17;i<=24;i++){
if(digit[i]!=adigit[i-16]){
break;
}
if(i==24) ans++;
}
for(int i=25;i<=32;i++){
if(digit[i]!=adigit[i-24]){
break;
}
if(i==32) ans++;
}
}
printf("%lld\n",ans);
}
}