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

#include <stdio.h> int count_binary_ones(int n) { int sum=0; if(n%2!=0){ sum++; return n/2; }else return (n/2); return sum; } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); printf("%d",all); return 0; }
这段代码试图计算一个整数的二进制表示中1的个数,但逻辑有误。函数 `count_binary_ones` 只处理了最低位是否为1,然后直接返回 `n/2`,没有递归或循环来继续处理剩余位,也没有正确累加结果。

- 函数中 `return n/2` 会立即结束函数,导致 `sum` 的累加和后续逻辑无效。你需要思考如何让函数持续处理数字的每一位,而不是只处理一次。
- 当前代码没有递归调用自身或使用循环来检查所有二进制位。考虑如何利用递归或循环,每次处理一位后,将剩余部分继续交给函数处理。