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{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;iprintf("%d,",k[i]);//这里循环输出因数
printf("%d\n",k[n]);//这里输出数组最后一位
}
}
}
很显然楼主没有基础,而且对解决因数问题没思路,我先说下思路:采用遍历方式,从0-1000一个个地去试。
如果一个数j是因数,就放进数组k中。
注:目测楼主的代码应该无法解决问题。
#include
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
{ 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
printf("%d\n",k[n]);//这个又是什么?for(i=0;i
}
}
}
觉得你还应该多做练习,遇到不懂的问题是先慢慢分析