C语⾔完数详解
⾸先看⼀下完数的概念:完数,即,⼀个数如果恰好等于除它本⾝外的因⼦之和,这个数就称为完数。例如6=1+2+3.(6的因⼦是1,2,3)
题⽬概要:请写⼀个C语⾔程序,要求输⼊⼀个数字n输出从1~n范围内的所有完数,如果有则输出1~n范围内的所有完数。如果没有,则输出No!
解题思路:⽤⼀个双重for循环来遍历每⼀个数,外层循环来遍历每⼀个1~n范围中的数字,内层循环来求出每⼀个数的因⼦,并将其因⼦存⼊⼀个数组,以便对其因⼦进⾏求和判断该数是不是完数,如果是完数,则将该数存⼊另⼀个数组以便输出。该题⽬主要考察了对循环的使⽤。也可以使⽤while等循环⽅式解该题⽬。
程序代码:
#include <stdio.h>
#include <stdlib.h>
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<i;j++)
{
if(i%j==0)
{
b[k]=j;
k++;
}
}
for(m=0;m<k;m++)
{
sum+=b[m];
}
if(sum==i)
{
w[s]=i;
s++;
}
}
if(s!=0)
{
for(i=0;i<s;i++)
printf("%d ",w[i]);
}
else
{明解c语言
printf("No!");
}
return 0;
}
另⼀种⽐较简洁的写法:
#include<stdio.h>
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<i;j++)
{
if(i%j==0)
t-=j;
}
if(t==0)
{
a[k]=i;
k++;
}
}
if(k!=0)
{
for(i=0;i<k;i++)
{
printf("%d ",a[i]);            }
}
else
{
printf("No!");
}
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。