Online Compiler C

#include <stdio.h> void print_prime_factors(int n, int delitel) { if (n == 1) return; if (n % delitel == 0) { printf("%d ", delitel); print_prime_factors(n / delitel, delitel); } else { print_prime_factors(n / delitel, delitel + 1); } } int main() { int n; int sum1 = 0; int sum2 = 0; while (scanf("%d", &n) == 1) { if (n == 0) { break; } if (n > 0) { sum1 += n; } if (n < 0) { sum2++; } } printf("%d %d", sum1, sum2); return 0; }
这段代码包含两个不相关的部分:一个递归函数 `print_prime_factors` 用于打印质因数,以及 `main` 函数中读取整数并计算正数之和与负数个数的逻辑。`main` 函数的功能是:不断读取整数,遇到0停止,然后输出所有正数的和以及负数的个数。

代码中存在一个逻辑错误:

- 在 `print_prime_factors` 函数的 `else` 分支中,当 `n` 不能被 `delitel` 整除时,你递归调用了 `print_prime_factors(n / delitel, delitel + 1)`。这里 `n / delitel` 是错误的,因为此时 `delitel` 不是 `n` 的因子,不应该用 `n` 除以它。正确的做法是保持 `n` 不变,只增加除数。

- 另外,`print_prime_factors` 函数在 `main` 中并没有被调用,所以这个错误不会影响当前程序的运行结果,但如果你打算使用它,需要修正。