问题
一个数如果恰好等于它的因子之和,这个数就称之为“完数”。例如:6=1+2+3.请找出1000以内的所有完数。
程序分析
首先,for循环2到1000个数,用s=s-i;控制是否可以是完数,n记录下每一次因子的下标,i为因子,给一个数组用来输出。
代码如下
#include <stdio.h>
int main()
{
static int k[100];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-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]);
}
}
return 0;
}
总结
对数字的处理上,可以根据需要灵活的定义多个变量,不同变量实现不同的功能即可,可先定义出来,具体再据情况而定。有时,一个变量需要在多个地方进行判断,可以通过赋值来更加清楚每一个变量所实现的具体功能。
如本题:( s = j )就是如此。