Online Compiler C

#include <stdio.h> unsigned int to_binary(int n){ if(n<2){ return n; }else return to_binary(n/2+n%2); } int main() { int x,all; scanf("%d",&x); all=to_binary(x); printf("%d",all); return 0; }
这段代码试图将一个十进制整数转换为二进制表示,但实现有误。`to_binary` 函数本应递归地构建二进制数字,但当前逻辑不正确。

- 递归调用 `to_binary(n/2+n%2)` 是错误的。正确的思路应该是先递归处理 `n/2`,然后再加上当前最低位的值(即 `n%2`),并且需要将最低位放在正确的位置上(例如乘以10的某次幂)。
- 函数返回类型是 `unsigned int`,但二进制表示通常用字符串或整数形式(如1010)输出,这里用整数返回会导致数值含义混淆,比如二进制1010会被当作十进制1010。

提示:
- 检查递归公式:二进制表示中,最低位是 `n%2`,高位部分由 `n/2` 的二进制结果决定。你需要考虑如何将高位结果和低位组合成一个整数,例如 `高位结果 * 10 + 低位`。
- 注意递归的终止条件:当 `n` 为0或1时,直接返回 `n` 本身是正确的,但需要确保其他情况下的组合方式正确。