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

#include <stdio.h> unsigned int convert_to_base(int n, int p){ unsigned int num=0,sum=0; while(n>0){ num=n%p; sum=sum*10+num; n=n/p; } return sum; } int main() { unsigned int x,y,answer; scanf("%u%u",&x,&y); answer = convert_to_base(x,y); printf("%u",answer); return 0; }
这段代码试图将一个十进制数 `x` 转换为以 `y` 为基数的表示,并以十进制整数的形式返回结果。例如,输入 `10 2` 会输出 `1010`(十进制数一千零一十,表示二进制 1010)。

代码逻辑是:每次取余数作为当前位,然后累加到 `sum` 中,但这里有一个关键问题。

- 你使用 `sum = sum * 10 + num` 来拼接数字,这实际上是把每一位当作十进制数字来拼接。例如,如果基数是 16,余数可能是 10(对应十六进制的 A),但 `sum * 10 + 10` 会得到 110,而不是正确的表示。所以这种方法只适用于基数不超过 10 的情况。

- 另外,`scanf` 使用了 `%u` 读取 `x` 和 `y`,但函数参数 `n` 是 `int` 类型,如果输入很大的无符号数,可能会溢出或出现符号问题。