【题目】

【解题思路】
这道题的核心问题是如何求出所有数据转换成二进制数据后包含的 1 的个数。我们知道十进制转二进制采用的的是"除2倒取余"的方法,也就是转换为的二进制数据实际就是由原数据不断的除以2,同时保留余数,最后将余数逆序输出得到。而本题并不需要得到实际的二进制数据,只需要得到二进制数据中 1 的个数,所有我们只需要判断每一次得到的余数是0还是1,如果是 1 就统计。
【代码】
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
int cnt=0;//统计1的个数
int check;//校验码
for(int i=0;i<n;i++)
{
cin>>a[i];//输入一个数
while(a[i]!=0)//求数转换为二进制之后,1的个数
{
if(a[i]%2==1)
cnt++;
a[i]/=2;//更新
}
}
if(cnt%2==1)//如果1的个数为奇数个,则校验码为1
check=1;
else
check=0;//否则校验码为0
cout<<cnt<<" "<<check;
return 0;
}