解题思路:首先找到N以内那些数是完数,再把它们除本身以为的因子找出来按格式输出。继续判断下一个数。

注意事项:注意大括号,注意换行,我的做法可能有点笨。但是应该容易理解。

参考代码:

#include<stdio.h>
main()
{
 int n,i,j,k,sum;
 scanf("%d",&n);
 for(i=1;i<n-1;i++)
 { sum=0;
   for(j=1;j<=i-1;j++)
       if(i%j==0)     /*把各个因子加起来*/
        sum+=j;      
     if(sum==i)       /*判断是否为完数*/
   {
      printf("%d its factors are ",i);  /*输出按格式输出完数*/
      for (k=1;k<=i-1;k++)             /*找出该完数的因子*/
      if(i%k==0)
      printf("%d ",k);                   /*输出因子*/

      printf("\n");                       /*换行,判断下一个数*/
   }
 }
}

点赞(4)
 

0.0分

11 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 8 条评论

18软件白浩彤 4年前 回复TA
@莪是男神 好的好的
莪是男神 4年前 回复TA
完数没有奇数,第一个完美数是6,可以再优化一下代码
18软件白浩彤 4年前 回复TA
@沈伟 int main 要有一个int 类型的返回值啊。。
沈伟 4年前 回复TA
为什么提交后运行错误?
#include<stdio.h>
#include<string.h>
int main(){
	int a[30],n,sum=0,i,j,x=0;
	scanf("%d",&n);
	for(i=2;i<n;i++){
		for(j=1;j<i;j++){
			if(i%j==0){
				sum+=j;
				a[x]=j;
				x++;
			}
		}
		if(sum==i){
			printf("%d its factors are ",i);
			for(j=0;a[j]!=0;j++)
			printf("%d ",a[j]);
			printf("\n");
		}
		sum=0;
		x=0;
		memset(a,0,sizeof(a));
	}
}
秋刀鱼的风 5年前 回复TA
@18软件白浩彤 兄弟,这个k用j代替可以吗?
18软件白浩彤 6年前 回复TA
@验题君 okok
验题君 6年前 回复TA
代码格式调整调整哈
18软件白浩彤 6年前 回复TA
大家给点个赞再走啊 。编的不好,鼓励鼓励呗。