原题链接:[编程入门]完数的判断
解题思路:
使用两层循环,外循环寻找完数,内循环寻找因子
细节上为了避免输出因子时仍要循环寻找因子,引入数组来储存因子,并用指针的移动来控制数组的读写
但是非完数也会有储存因子的过程,所以代码写得少了,但运行速度并不算快
主要是不希望做重复的过程和定义太多变量,容易搞乱
参考代码:
#include <stdio.h> int main() { int n; scanf("%d", &n); //输入n for (int i = 6; i <= n; i++) //for循环从第一个完数6开始 { // if (i % 10 != 6 && i % 10 != 8) continue; //减少运行时间可加入此行,跳过个位非6与8的数 int s[100] = {0}; //初始化数组s全为0,循环内的临时数组每次循环都会初始化 int *p = s; //通过指针p的移动来控制数组的读写 for (int j = 1; j <= i / 2; j++) { if (i % j == 0) { *++p = j; //此处p先后移,再赋值储存因子j s[0] += j; //s[0]储存因子的和 } } if (s[0] == i) //s[0]==i 则 i 为完数 { printf("%d its factors are", i); for (p = &s[1]; *p != 0; p++) //for循环p指向s[1],值为0时停止,每次循环后移一次 { printf(" %d", *p); } putchar('\n'); } } return 0; }
0.0分
28 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复