Online Compiler C

#include <stdio.h> unsigned int convert_to_base(int n, int p) { unsigned int result = 0; unsigned int multiplier = 1; if (n == 0) { return 0; } while (n > 0) { int digit = n % p; result +=digit*multiplier; multiplier*=10; n=n/p;} return result }
这段代码试图将一个十进制整数 `n` 转换为以 `p` 为基数的表示,并将结果以十进制整数的形式返回(例如,将 10 转换为二进制会返回 1010)。但代码存在几个问题。

- 函数返回类型是 `unsigned int`,但 `n` 是 `int`,如果 `n` 为负数,循环 `while (n > 0)` 会直接跳过,返回 0,这可能是合理的,但需要注意。
- 在 `return result` 后面缺少分号,会导致编译错误。
- 变量 `multiplier` 每次乘以 10,这适用于将每一位数字拼接到十进制结果中,但要注意 `digit` 可能大于 9(例如基数为 16 时),此时直接拼接会得到错误的结果,因为十进制数字只能表示 0-9。