Online Compiler C

#include <math.h> #include <stdio.h> int main() { int n, i = 1; int m; 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) 的因子,然后想从大到小输出对应的另一半因子,但后半部分有错误。

- 第15行 `p = n % i;` 这里变量 p 没有声明,而且你想输出的是 n/i 而不是余数。
- 第16行 `printf("%d ", p) i--;` 缺少分号,并且 p 的值不对。
- 当 i 为 0 时,`n % i` 会导致除零错误,循环条件 `i >= 0` 会让 i 降到 0。