大家帮我看看,求解答
这个问题是在回复https://bbs.bccn.net/thread-337285-1-1.html的时候遇到的下面的程序是用来测试一个数字是否为完数,并找出它的所有因子
程序代码:#include <stdio.h>
int is_perfect_p(int n, int f[]) { // 测试是否为完数,并找出它的因子
int i, j = 1, sf = 1;
f[0] = 0;
for (i = 2; i * i < n; i++) {
if (n % i == 0) {
f[j++] = i;
f[j++] = n / i;
sf += i + f[j - 1];
}
}
if (i * i == n) {
sf += i;
f[j++] = i;
}
f[0] = j;
return sf == n;
}
int sort(int a[]) { // 排序。这里用来对因子进行排序,使输出的信息更清楚
int i, j, k;
for (i = 1; i < a[0]; i++) {
for (j = i + 1; j < a[0]; j++) {
if (a[j] < a[i]) {
k = a[i];
a[i] = a[j];
a[j] = k;
}
}
}
return 0;
}
int factors[20] = {0}; // 有件事我很不解。如果把这个定义放在 main() 函数里,就会死循环。大家试一下在你们的机器上会不会这样。ps: gcc 4.5.2
int main() {
int i, j;
for (i = 6; i <= 1000; i++) {
if (is_perfect_p(i, factors)) {
sort(factors);
printf("%d its factors are 1,", i);
for (j = 1; j < factors[0] - 1; j++) {
printf("%d,", factors[j]);
}
printf("%d\n", factors[j]);
}
//printf("%d\n", i);
}
return 0;
}求高手讲解原因
[ 本帖最后由 voidx 于 2011-4-20 18:38 编辑 ]









