这是一个错误的程序。找了十分钟没找到错误,静下心来,发现,存储因子应该在判断该数是否是完数之后。
/*
Name:
Copyright:
Author:
Date: 30/07/17 18:20
Description:
【程序19】题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程,找出1000以内的所有完数。
程序分析:有点类似程序14
*/
#include <stdio.h>
int main()
{
int i,j,k,n,sum,s[10];
for(i = 2;i < 1000;i++)
{
n = 1;
sum = 0;
for(j = 1;j < 0.5 * i;j++) //判断因子时不能包含自身
{
if(i % j == 0)
{
s[n] = j;
n++;
sum = sum + j;
}
}
if(sum == i)
{
printf("%d是完数,其因子为",i);
for(k = 1;k < n;k++)
{
printf("%3d",s[k]);
}
printf("\n\n");
}
}
return 0;
}
下面是正确的程序。
/*
Name:
Copyright:
Author:
Date: 30/07/17 18:20
Description:
【程序19】题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程,找出1000以内的所有完数。
程序分析:有点类似程序14
*/
#include <stdio.h>
int main()
{
int i,j,k,n,sum,s[10];
for(i = 2;i < 1000;i++)
{
n = 1;
sum = i;
for(j = 1;j < i;j++) //判断因子时不能包含自身
{
if(i % j == 0)
{
sum = sum - j;
}
}
if(sum == 0)
{
printf("%3d是完数,其因子为:",i);
for(j = 1;j < i/2;j++) //判断因子时不能包含自身
{
if(i % j == 0)
{
printf("%5d",j);
}
}
printf("\n\n");
}
}
return 0;
}