|
# include <stdio.h> |
|
| 6分 |
修改如下:
int main()
{
int n, i, s;
for (n = 2; n <= 1000; n++)
{
s = 0;
for (i = 1; i < n; i++)
{
if (n % i == 0)
s = s + i;
}
if (s == n)
{
printf("%d是完全数。它的因子是:", n);
for (i = 1; i < n; i++)
{
if (n % i == 0)
printf("%d ", i);
}
printf("\n");
}
}
return 0;
}
|
| 7分 |
一个高效点的版本:
int factors[100]; //存放因子
int main()
{
int n, i, j, s;
for (n = 2; n <= 1000; n++)
{
s = 0;
j = 0;
for (i = 1; i <= n/2; i++)
{
if (n % i == 0)
{
s = s + i;
factors[j++] = i; //记录n的因子
}
}
if (s == n)
{
printf("%d是完全数。它的因子是:", n);
for (i = 0; i < j; i++) printf("%d ", factors[i]);
printf("\n");
}
}
return 0;
}
//6是完全数。它的因子是:1 2 3
//28是完全数。它的因子是:1 2 4 7 14
//496是完全数。它的因子是:1 2 4 8 16 31 62 124 248
|
| 7分 |
第二个for循环应该只包含紧跟它的if语句,你的目的是对穷举找出n的每个因子并求和。在你的源代码里,把第二个if也包含在内,就会在求n因子的过程中(还没有完全求完,只是部分因子)得到的和与n相同,然后就会输出全部。
|
|
多谢各位高手指点!
|
|