B-神奇的函数

神奇的函数

https://ac.nowcoder.com/acm/contest/32992/B

1.在fun()函数中计算传入数据n的二进制序列中,1的个数,如果为奇数,fun()函数返回值为1,偶数,返回值为0.

2.逻辑左移,右移计算规则。 .alt

#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;    
}









全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务