C语言经典例19-完数

落日映苍穹つ 2023-07-03 12:07 79阅读 0赞

目录

  • 1 题目
  • 2 分析
  • 3 实现
  • 4 运行结果

1 题目

一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。

因子:假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子

2 分析

本题想要验证某个数,必须计算它的因子,计算因子的方法见 C语言经典例14-将一个正整数分解质因数 ,计算出因子后,在求和判断即可

3 实现

  1. #include <stdio.h>
  2. int main() {
  3. int a[100]; // 临时数组用于保存因子
  4. for (int i = 2; i <= 1000; i++) {
  5. int sum = 1; // 1是所有数的因子,直接保存
  6. a[0] = 1;
  7. int k = 0; // k用于保存数组中储存了多少因子,用于最后输出
  8. for (int j = 2; j <= (i/2); j++) { // 分解因子
  9. if (i % j == 0) { // 若能整除则j为因子之一
  10. sum += j; // 累加因子到总和
  11. a[++k] = j; // 将因子保存到数组中,移动数组标号
  12. }
  13. }
  14. if (i == sum) { // 判断该数的因子的和是否等于该数
  15. printf("%d = %d", i, a[0]); // 输出计算式
  16. for (int n = 1; n <= k; n++) {
  17. printf(" + %d", a[n]);
  18. }
  19. printf("\n");
  20. }
  21. }
  22. return 0;
  23. }

4 运行结果

  1. 6 = 1 + 2 + 3
  2. 28 = 1 + 2 + 4 + 7 + 14
  3. 496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248

发表评论

表情:
评论列表 (有 0 条评论,79人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C语言-寻找

    题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式

    相关 C语言经典算法100

    【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的

    相关 C语言经典100

    已经将文章整理成pdf ,方便大家阅读: [点击下载本文pdf][pdf] [程序员相关的宝贵资料,点击免费获取][Link 1] 【程序1】 题目:有1、2、

    相关 C语言——

    题目内容: 一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。 现