在线编译器 C

#include <math.h> #include <stdio.h> int main() { int n, i = 1; int m, p; scanf("%d", &n); m = sqrt(n); while (i <= m) { if (n % i == 0) { printf("%d ", i); } i++; } i = i - 1; while (i >= 0) { p = n % i; printf("%d ", p); i--; } return 0; }
这段代码试图输出整数 n 的所有因子,但存在逻辑错误。它先从小到大输出小于等于 sqrt(n) 的因子,然后试图从大到小输出对应的另一半因子,但后半部分处理有误。

- 在第二个 while 循环中,`p = n % i` 计算的是余数,而不是对应的因子。你应该用 `n / i` 来得到与 i 配对的因子。
- 第二个循环的初始值 `i = i - 1` 可能让 i 变成 0,而 `n % 0` 会导致除零错误。你需要确保 i 从正确的值开始,并且避免除以 0。