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

#include <stdio.h> unsigned int to_binary(int n) { if (n <= 1) { return ("%u", n); } to_binary(n / 2); return n % 2; } } int main() { sum_to_n(5); printf("%d", sum_to_n(5)); return 0; }
这段代码试图实现一个将整数转换为二进制表示的函数,但存在几个问题。

首先,`to_binary` 函数中 `return ("%u", n)` 的写法是错误的。逗号表达式会返回最后一个值,但这里用字符串 `"%u"` 没有意义,而且函数返回类型是 `unsigned int`,不能返回字符串。另外,递归调用 `to_binary(n / 2)` 后没有使用其返回值,导致递归结果被丢弃。

其次,`main` 函数中调用了 `sum_to_n` 函数,但代码中并没有定义这个函数,应该是想调用 `to_binary`。同时,`printf` 打印 `sum_to_n(5)` 也会导致编译错误。

- 检查 `to_binary` 函数中递归调用的返回值:递归计算出的二进制位需要被组合起来,而不是直接丢弃。思考如何将递归结果与当前位的值(`n % 2`)正确拼接。
- 确认 `main` 函数中调用的函数名是否正确,以及是否应该调用 `to_binary` 而不是未定义的 `sum_to_n`。