Online Compiler C

#include <stdio.h> unsigned int to_binary(int n){ if(n<2){ return n; } return (to_binary(n/2)+n%2); } int main() { int x,all; scanf("%d",&x); all=to_binary(x); scanf("%d",all); return 0; }
这段代码试图将一个整数转换为二进制表示,但存在几个问题。

函数 `to_binary` 的递归逻辑不正确。当前写法将递归结果与当前最低位相加,但二进制表示需要将低位放在正确的位置上,而不是简单相加。例如,对于数字 5(二进制 101),递归会返回 `to_binary(2) + 1`,而 `to_binary(2)` 返回 `to_binary(1) + 0`,最终得到 `1+0+1=2`,这不是正确的二进制数。

- 在递归中,你需要将当前位放在正确的位置,比如通过乘以 10 或使用移位操作,而不是直接相加。
- 主函数中第二个 `scanf` 使用了错误的参数:`scanf("%d", all);` 应该传入变量的地址 `&all`,而不是变量本身。