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

#include <stdio.h> unsigned int convert_to_base(int n, int p){ int x = 1; int power_of_10 = 1; int digit = 0; while (n > 0){ for (int i = 1;i < x;i++){ power_of_10 = power_of_10 * 10; } x++ int last = n % p; digit = digit + last * power_of_10; n = n / p; } return digit; } int main() { return 0; }
这段代码试图将一个十进制整数 `n` 转换为 `p` 进制表示,并以十进制整数的形式返回结果(例如,将十进制 5 转换为二进制,期望返回 101 这个整数)。但代码中存在语法错误和逻辑问题。

- 第 11 行 `x++` 后面缺少分号,会导致编译错误。
- 变量 `power_of_10` 在每次循环中都被重新计算,但它的初始值 `1` 只在循环外设置了一次。每次循环开始时,`power_of_10` 应该重置为 1,否则会累积之前的值。
- 循环逻辑有误:`for` 循环每次都会将 `power_of_10` 乘以 10 共 `x-1` 次,但 `x` 每次循环只增加 1,这会导致 `power_of_10` 的增长方式不符合预期。实际上,你只需要在每次循环时让 `power_of_10` 乘以 10 一次,而不是用嵌套循环。

- 检查 `x++` 后面是否缺少分号,这是语法错误。
- 思考 `power_of_10` 应该在循环的什么位置更新,以及每次循环开始时它的值应该是多少。不需要用 `for` 循环来重复乘 10,每次循环乘一次 10 就足够了。