快期末了开始自己过手遗留的作业.
//求正整数2和n之间的完全数
//注意函数只需要判断是不是完全数,不需要找完,打印。明确main函数与Judge函数各自管理哪些变量
#include <stdio.h>
int Judge(int n); //函数声明在主函数前,要加;是一条语句
int main()
{
int n,i;//这里的n是我们输入的范围上界
scanf("%d",&n);
for (i=2;i<=n;i++)//在范围内一个个带入递增的整数i进行判断。
{
if (Judge(i))//条件可以直接写函数
{
printf ("%d ",i);//作业要求数字之间有空格
}
}
return 0;
}
int Judge(int n )
{
int sum =1,j=2; //sum是相加和,用于与输入的值判断相不相等,j是再此一个一个地筛选因式
for (j=2;j<=n/2;j++)//一个数的因子不可能大于它的一半(除非它本身)减少循环次数--》第一次超时了emmm
{
if (n%j==0)//注意是取余数为0才是因式,不是除数哦
sum+=j;
}
if (sum==n)
{
return 1;//表示真 ,肯定或成功
}
else
{
return 0;
}
}