题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5980
题目大意:
给N个数 每个数都可以拆开成一个32位的2进制 每八位一个字节 每个字节的2进制数换算成十进制的看有多少个97
题目思路:
一开始读题确实懵,但是理解题意后变得简单了不少,即利用位运算,每八位进行判断,判断组成的数字是否为97即可。
学到的东西:
思考位运算的性质。
代码:
#include <bits/stdc++.h>
using namespace std;
int nn[8]={1,2,4,8,16,32,64,128};//进行赋值,每一位代表队的值为多少
int main()
{
int t;
while(~scanf("%d",&t)){
int sum=0;
while(t--){
int num;scanf("%d",&num);
int h=4;
while(h--){
int tmp=0;
for(int i=0;i<8;i++){
if(num&1) tmp+=1*nn[i];
//cout<<tmp<<endl;
num=num>>1;
}
if(tmp==97) sum++;
tmp=0;
}
}
cout<<sum<<endl;
}
}