C语言程序求解释,看不懂呀!!!

/*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
   找出1000以内的所有完数。*/
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;//为什么是-1?
s=j;
for(i=1;i<j;i++)
{if((j%i)==0)
{ n++;
s=s-i; // 为什么要减去?
k[n]=i;//数组为什么要赋值?
}
}
if(s==0)
{printf("%d is a wanshu: ",j);
for(i=0;i<n;i++)
printf("%d,",k[i]);//这个是什么?
printf("%d\n",k[n]);//这个又是什么?
}
}
}

main()
{
  static int k[10];
  int i,j,n,s;
  for(j=2;j<1000;j++)
    {
     n=-1;//因为数组是从0开始存放的,看下面的for循环里面的n
     s=j;
     for(i=1;i<j;i++)
       {if((j%i)==0)
          {  n++;//这样n=0了
             s=s-i; // 
             k[n]=i;//这里将因数存放在数组中
          }
       }
  if(s==0)
   {printf("%d is a wanshu:  ",j);
    for(i=0;i<n;i++)
        printf("%d,",k[i]);//这里循环输出因数
    printf("%d\n",k[n]);//这里输出数组最后一位
   }
}
}

很显然楼主没有基础,而且对解决因数问题没思路,我先说下思路:采用遍历方式,从0-1000一个个地去试。

如果一个数j是因数,就放进数组k中。

注:目测楼主的代码应该无法解决问题。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-12
#include<stdio.h>
void main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;//为什么是-1?这里楼上的说了,我就不做解释了
s=j;
for(i=1;i<j;i++)
{if((j%i)==0)
{ n++;
s=s-i; // 为什么要减去? 之前你把j赋给了s,s就相当于是你所求的那个数是不是完数,比如说当j=6时,
s=6,6的因子是1,2,3,i从1开始,先判断1是否是6的因子,如果是,就减掉1,以此类推,2,3也是相同的情况,
如果s减去它所有的因子以后等于0,就可以判断它是完数,如果不等于0就不是完数。
k[n]=i;//数组为什么要赋值? 这一行是把它的因子存入数组里面,以便后面可以输出完数的因子(1)
printf("%d\n",n);
}
}
if(s==0)
{printf("%d is a wanshu: ",j);
for(i=0;i<n;i++)
printf("%d,",k[i]);//这个是什么?(1)最后一个for语句还可以改成
printf("%d\n",k[n]);//这个又是什么?for(i=0;i<n;i++)
//最后一个for语句还可以改成 for(i=0;i<=n;i++){printf("%d,",k[i]); printf("\n");}

}
}
}
觉得你还应该多做练习,遇到不懂的问题是先慢慢分析本回答被提问者采纳
相似回答
大家正在搜