源代码如下:
#include
main()
{
int i,j;
int sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j
{
if(i%j==0)
sum+=j;
}
if(sum==i)
{
printf("%d its factors are ",i);
for(j=1;j
if(i%j==0)
printf("%d ",j);
}
printf("\n");
}
扩展资料
1、完全数是一些特殊的自然数,它所有的真因子即除了自身以外的约数的和即因子函数,恰好等于它本身。
2、第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28。
3、有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。
//看我给你改写的。
#include
int main()
{
int sum=0;
for(int i=1;i<=1000;i++) //循环在1-1000内进行
{
sum=0; //每次循环都先将sum初始化为0
for(int j=1;j
if(i%j==0) //如果j能被i整除,则j是i的因数
sum+=j; //就累加到sum中
if(sum==i) //如果和sum等于i这个值
{
printf("完全数有:%d=1",i); //则输出
for(j=2;j
if(i%j==0)
printf("+%d",j);
printf("\n");
}
}
return 0;
}
#include
#include
void main(){
int x,y,i,sum,h;
int *a;
printf("1000以内的所有完整数:\n");
for(i=1;i<=1000;i++) {
sum = 1;
a = (int *)malloc (i*sizeof(int));
a[0]=1;
for(x=2,h=1;x y=i%x;
if(y==0){
a[h] = x;
sum+=x;
h++;
}
}
if(sum==i) {
printf("%d its factors are ",i);
for(x=0;x
printf("%d\n",a[x]);
}
free(a);
}
}
for(j = 1;j < i;j++)
{
if(i % j == 0)
{
a[k] = j;
k++;
}
}
这个循环是用来找数i的因数j的。每次找到一个因数j,就存放在数组a[]中,下标就是k。
for(h = 0;h < k; h++)
{
s += a[h];
}
这个循环中,h相当于就是对数组a从0到k遍历相加。因为在上一个循环中,每次找到一个因数j,存放在数组a中后,k都做了++操作,所以k的值是在增加的,到最后跳出循环的时候,k的值就是数i的因数的个数了,也就是说数组a中有k个元素了。所以第三个循环时候h是从0开始,以小于k做结束条件的。