1.在fun()函数中计算传入数据n的二进制序列中,1的个数,如果为奇数,fun()函数返回值为1,偶数,返回值为0.
2.逻辑左移,右移计算规则。
#include <iostream>
using namespace std;
long long n,i;
inline long long read(){ //inline 内联函数,在main()中调用时,相当于read()函数在main()内部,可以加快运行速度
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
inline int fun(long long n)
{
int ans=0;
for(int i=31;i>=0;i--) {
int t=(n>>i)&1; //相当于 (num/(2^i) )%2;
if(t) ans++; //求二进制序列中1或0的个数,这个方法很实用
}
if(ans%2==1) return 1; //1个个数,返回值
return 0;
}
int main()
{
scanf("%lld",&n);
long long ans=0;
for(i=0;i<n;i++) {
long long res=read(); //用题目中给出的数据读取函数
ans+=fun(res);
}
printf("%lld",ans);
return 0;
}