#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。