在线编译器 C

#include <stdio.h> unsigned int convert_to_base(int n, int p){ unsigned int num, result=0,power10=1; while(n>0){ num=(n%p)*10; result=result+num; n=n/p; power10=power10*10; } return result; } int main() { int x, y; scanf("%d%d", &x, &y); printf("%u", convert_to_base(x, y)); return 0; }
这段代码试图将一个十进制整数 `x` 转换为 `y` 进制,并以十进制整数的形式返回结果。例如,将十进制 5 转换为二进制,期望得到 101,但函数会返回整数 101。

代码的主要问题在于对每一位数字的处理方式。在循环中,`num=(n%p)*10` 这一行将当前位的值乘以 10,但这样无法正确地将多位数字拼接到正确的位置上。例如,当处理二进制数时,每一位只能是 0 或 1,乘以 10 后得到 0 或 10,然后累加到结果中,这会导致结果中的数字位置错乱。

- 提示1:思考如何将每一位数字放到正确的位置上。通常的做法是,每次取出的余数(即当前位)应该乘以当前位对应的权重(例如个位、十位、百位),而不是固定乘以 10。
- 提示2:注意 `power10` 变量在代码中虽然定义了,但从未被使用。这个变量本可以用来控制每一位的权重,但当前代码没有正确利用它来累加结果。