Онлайн компилятор C

#include <stdio.h> int count_binary_ones(int n) { if(n%2==0){ return 0; } return n%2+(count_binary_ones(n/2)); } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); printf("%d",all); return 0; }
这段代码试图计算一个整数的二进制表示中1的个数,但存在逻辑错误。

- 当n为偶数时,函数直接返回0,这会导致丢失后续的1计数。例如,对于二进制数10(十进制2),最低位是0,但更高位可能有1,函数却直接返回0。
- 递归调用`count_binary_ones(n/2)`是正确的思路,但需要确保每次递归都正确累加当前最低位的值,而不是在偶数时中断。

- 提示1:检查当n为偶数时,是否应该直接返回0。考虑n=2(二进制10)的情况,期望结果是1,但你的函数会返回什么?
- 提示2:递归的终止条件应该是什么?当n等于0时,二进制中没有1,此时应该返回0。你的代码缺少这个基础情况。