完美数(Perfect number),又称完全数或完备数,是一些特殊的自然数。该数所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。如果一个数恰好等于它的因子之和,则称该数为“完美数”。
十多年专注成都网站制作,企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于企业网站建设,高端网页制作,对成都VR全景等多个方面,拥有丰富的网站设计经验。
所以根据定义,可以得到判断完美数的程序:
int is_perfect_number(int n)//对n进行判断,如果是完美数,返回1,否则返回0.
{
int j,sum = 0;
sum=0;
for(j=1;jn;j++)//对每个小于n的正数进行遍历,
if(n%j==0)//如果是因子,
sum=sum+j;//累加到sum上。
return sum==n;//返回结果。
}
两个问题
1 结尾多打印了一个。
u为找到完美数的个数。 所以打印应该是从a[0]到a[u-1]
不应该打印a[u]
按照你的写法, 循环应该是for(i = 0; i u-1; i ++)
然后下面一行打印a[u-1]
2 没有处理u=0的情况。 单独判断一下, u=0时,输出No
我写了一个,在vs上运行正常,供参考:
#include stdio.h
unsigned int inputArg1,inputArg2;
int isPrefect(int);
void printPrefect(int);
int main(void)
{
int count = 0;
int i;
start:
count = 0;
printf("请输入第一个参数:\n");
scanf("%d",inputArg1);
printf("请输入第二个参数:\n");
scanf("%d",inputArg2);
for (i = inputArg1;i = inputArg2; i ++)
{
if (isPrefect(i))
{
printPrefect(i);
count ++;
}
}
printf("完全数的个数为: %d \n\n\n",count);
goto start;
return 0;
}
int isPrefect(int num)
{
int j;
int sum = 0;
for (j = 1;j = num / 2;j ++)
{
if (num % j == 0)
{
sum += j;
}
}
if (sum == num)
{
return 1;
}
else
{
return 0;
}
}
void printPrefect(int num)
{
int i;
printf("%d = ",num);
for (i = 1;i = num / 2; i ++)
{
if (num % i == 0)
{
printf("%d + ",i);
}
}
printf("\b\b \n");
}
#includestdio.h
int main()
{
int i,n,sum;
int a,b;
scanf("%d%d",a,b);
for(n=a;n=b;n++)
{
sum=0;
for(i=1;in;i++)
{
if(n%i==0)
{sum=sum+i;}
}
if(sum==n)
{printf("%4d",n);}
}
return 0;
}
1、首先打开vs 2017软件,打开一个准备好的工程,新建一个C语言文件,先写入头文件和main函数,里面定义需要的用到的4个变量。
2、然后先定义一个for循环遍历100以内的所有数,利用条件语句进行判断j是不是i的因子,是的话就相加,判断完成后在判断因子是不是和原来的数相等即可,盘点完输出完成判断的数字,如此往复直到判断完100个数为止。
3、最后按Crtl+F10运行程序,可以看到100以内的完数都输出了。
#include stdio.h
void main(){
int s,i,j;
for(s=2;s=1000;s++)
{
j=0;
for(i=s-1;i0;i--)
{
if(s%i==0){j=j+i;}
}
if(s==j)
{
printf("完数:%d the factors are ",s);
for(i=1;is;i++)
{
if(s%i==0){printf("%d,",i);}
}
printf("\n");
}
}
}