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

#include <stdio.h> unsigned int convert_to_base(int n, int p){ unsigned int num=0,sum=0,real=0; while(n>0){ num=n%p; real=p-num; sum=sum*10+real; n=n%p; } return sum; } int main() { int x,y,answer; scanf("%u%u",&x,&y); answer = convert_to_base(x,y); printf("%u",answer); return 0; }
这段代码试图将一个十进制数转换为指定进制的数,但逻辑有误。函数 `convert_to_base` 的意图是计算 `n` 在 `p` 进制下的表示,但实际计算过程不正确。

- 在循环中,`n = n % p` 这一行会导致 `n` 很快变成0,循环提前结束,无法正确处理所有位数。你应该用除法 `n = n / p` 来去掉已经处理过的最低位。
- 变量 `real = p - num` 看起来是想做某种补数运算,但进制转换不需要这个。正确的做法是直接记录每一位的余数 `num`,然后按顺序组合成结果。

检查你的循环条件和更新方式,以及组合数字的方法。