C语言 求助 感谢

 我来答
xgn911
2022-10-06 · TA获得超过1359个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:625万
展开全部

先统计n的二进制表示中1的个数,再判断是奇数还是偶数

方法一:逐位判断n的每一位是否为1,统计1出现的位数即可,相应代码如下

int countOnes(int n) { // 返回n中1的位数

    int cnt = 0;

    while (n != 0) {

        if ((n & 1) == 1) // n的最右一位为1

            cnt++;

        n >>= 1; // n右移一位,相当于遍历n的每一位

    }

    return cnt;

}

方法二:快速法,n&(n-1)可以将n的二进制表示中最右边的1置0

如6的二进制表示为110,5的二进制表示为101,110&101=100,可将110最右边的1置零

如此可以快速统计出n的二进制表示中1的个数。使用快速法的具体代码如下:

#include <stdio.h>

int quickCount(int n) { // 快速统计n中1的位数

    int cnt = 0;

    while (n != 0) {

        n &= n - 1; // 将n最右边的1置0

        cnt++; // 置一次则++,直到所有1都置0

    }

    return cnt;

}

int main() {

    int n;

    scanf("%d", &n);

    int ones = quickCount(n);

    if (ones % 2 == 0) // 偶数

        printf("EVEN\n");

    else

        printf("ODD\n");;

    return 0;

}

运行结果如下:

符合样例输出,望采纳~

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式