C语言 求助 感谢
先统计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;
}
运行结果如下:
符合样例输出,望采纳~