解题思路:首先要理解什么是完数,然后使用双重循环,外层循环用来遍历N以内的所有数,内循环用来判断是不是因子,并将所有因子求和与本身对比,判断是否是完数
注意事项:没次求完因子之和后记得将s清理以便于下一个数的判断
参考代码:
#include<stdio.h>
int main()
{
int N,i,j,s,k;
int a[100];
scanf("%d",&N); //接收N
for(i=1;i<=N;i++)//利用for循环,遍历N内所有数据
{
s=0;//变量s用来保存因子的和
k=0;//k是数字a的下表计数
for(j=1;j<i;j++)//遍历比i小的所有数
{
if(i%j==0) //对比i小的数进行取余处理,判读是否是i的因子
{
s+=j; //如果满足是i的因子,将其累加求和
a[k++]=j;//并保存该因子到数组中
}
}
if(s==i) //判断所有的因子之和与本身的值是否相等,若相等则输出
{
printf("%d its factors are ",i);
for(j=0;j<k;j++) //用for循环遍历数组中保存的因子并打印
{
printf("%d ",a[j]);
}
printf("\n");
}
}
return 0;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复