重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
站在用户的角度思考问题,与客户深入沟通,找到芒市网站设计与芒市网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、网站设计、企业官网、英文网站、手机端网站、网站推广、主机域名、雅安服务器托管、企业邮箱。业务覆盖芒市地区。
#define MAX 100 /*100以内的完全数*/
int main (void) {
int x,temp,sum; /*X表示要判断的数,temp表示数的因子,sum表示因子之和*/
for (x=1; x=MAX; x++) {
sum= 0;
for(temp=1; tempx; temp++) { /*判断x能否被temp整除,如果可以,则是因子,进行求和*/
if(x%temp==0)
sum= sum+temp;
}
if(sum==x) /*如果是完数,打印输出*/
printf("%d\t",x);
}
putchar ('\n');
fflush (stdin);
getch ();
return 0;
}
运行结果
两个问题
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
#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;
}
两个错误:
for(i=2;i=20000;i++)
{
a=0;
for(b=1;b=i-1;b++)
{
if(i%b==0)
{
a+=b;
//这里原来的判断移出去,否则可能只判断了一半的因子,就符合条件累加num了,比如:n=24,1+2+3+4+6+8=24, 这时满足条件,num++;但是还有一个因子12没加到a上,所以出错
}
}
if(a==i)
{
num++;
}
if(num==n){
printf("%d\n",i);
break; //这里加上退出,否则例如:打印第一个完美数是6,直到找到第二个完美数28之前一直满足num=n=1;所以会输出7——27
}
}
return 0;
}
完数,即完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。其所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。
根据该定义 可以得出判断完数的函数如下:
#include stdio.h
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i =n/2; i ++)
if(n%i == 0) s+= i;//统计所有真因子的和。
if(s == n) return 1;//如果与原值相等,则该数为完数。
return 0;//不是完数。
}
根据该函数,只需要对需要打印的范围内所有数做遍历,并逐一调用该函数判断,如果返回1则打印即可。
完美数(Perfect number),又称完全数或完备数,是一些特殊的自然数。该数所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于本身。如果一个数恰好等于它的因子之和,则称该数为“完美数”。
所以根据定义,可以得到判断完美数的程序:
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;//返回结果。
}