首先看一下完数的概念:完数,即完美数,一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3.(6的因子是1,2,3)
题目概要:请写一个C语言程序,要求输入一个数字n输出从1~n范围内的所有完数,如果有则输出1~n范围内的所有完数。如果没有,则输出No!
解题思路:用一个双重for循环来遍历每一个数,外层循环来遍历每一个1~n范围中的数字,内层循环来求出每一个数的因子,并将其因子存入一个数组,以便对其因子进行求和判断该数是不是完数,如果是完数,则将该数存入另一个数组以便输出。该题目主要考察了对循环的使用。也可以使用while等循环方式解该题目。
程序代码:
#include
#include
int main()
{
int n;
int i,j,sum,k,b[1000],w[1000],s=0,m;
printf("请输入数字n:");
scanf("%d",&n);
for(i=n;i>0;i--)
{
sum=0,k=0;
for(j=1;j
{
if(i%j==0)
{
b[k]=j;
k++;
}
}
for(m=0;m
{
sum+=b[m];
}
if(sum==i)
{
w[s]=i;
s++;
}
}
if(s!=0)
{
for(i=0;i
printf("%d ",w[i]);
}
else
{
printf("No!");
}
return 0;
}
另一种简介的写法:
#include
int main()
{
int i,j,k=0,a[1000],t,n;
printf("请输入数字n:");
scanf("%d",&n);
for(i=2;i<=n;i++)
{
t=i;
for(j=1;j
{
if(i%j==0)
t-=j;
}
if(t==0)
{
a[k]=i;
k++;
}
}
if(k!=0)
{
for(i=0;i
{
printf("%d ",a[i]);
}
}
else
{
printf("No!");
}
return 0;
}