Online Compiler C

#include <stdio.h> unsigned int convert_to_base(int n, int p) { unsigned int cymma = 0, o10 = 1; while ( n >= 0) { int octatok; octatok = n%p; cymma = octatok * o10; n /= p; o10 *= 10; } return cymma; } int main() { int a, b; scanf ("%u%u" , &a,&b ); printf("%u", convert_to_base(a,b)); return 0; }
这段代码试图将一个十进制数 `a` 转换为以 `b` 为基数的表示,并以十进制整数的形式返回(例如,将十进制 10 转换为二进制会返回 1010)。但代码中存在逻辑错误。

- 在 `convert_to_base` 函数中,`while ( n >= 0)` 这个条件会导致无限循环,因为当 `n` 变为 0 时循环仍会继续,而 `n /= p` 会让 `n` 一直为 0。你应该考虑循环何时应该停止。
- 在循环内部,`cymma = octatok * o10;` 这一行每次都会覆盖 `cymma` 的值,而不是累加。你需要将每次计算出的位值加到 `cymma` 上,而不是直接赋值。