鱼C论坛

 找回密码
 立即注册
查看: 1100|回复: 7

[已解决]c语言完数的判断函数法

[复制链接]
发表于 2021-11-14 18:10:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <math.h>
  3. int wanshu(int i);

  4. int wanshu(int i)
  5. {
  6.         int j,sum = 0;
  7.         for(j = 1;j < sqrt(i);j++)
  8.         {
  9.                 if(i % j == 0)
  10.                 {
  11.                         sum = sum + j;
  12.                 }
  13.         }
  14.         if(sum == i)
  15.         {
  16.                 return 1;
  17.         }
  18.         return 0;
  19. }

  20. int main(void)
  21. {
  22.         int i;
  23.         for(i =1;i <= 1000;i++)
  24.         {
  25.                 if(wanshu(i))
  26.                 {
  27.                         printf("%d是完数\n",i);
  28.                 }
  29.         }
  30.         return 0;
  31. }
复制代码



为什莫运行不出来,哪里错了
最佳答案
2021-11-14 19:27:35
本帖最后由 傻眼貓咪 于 2021-11-14 19:30 编辑

请问 6 的平方数是多少?答案是:2.44948974278
请问 6 的最大因数是多少?答案是:3

3 > 2.44948974278,但是你的代码永远找不到 3 就结束循环了(第 8 行代码 和 第 10 行)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-14 19:16:38 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. bool isPerfect(int n){
  4.     int res = 0;
  5.     for(size_t i = 1; i < n; i++) if(!(n%i)) res += i;
  6.     return res == n;
  7. }

  8. int main()
  9. {
  10.     for(size_t i = 1; i <= 1000; i++)
  11.     isPerfect(i) ? printf("%ld\n", i) : printf("");
  12.     return 0;
  13. }
复制代码
输出结果:
  1. 6
  2. 28
  3. 496
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-14 19:22:30 | 显示全部楼层

哥,为什莫我的不行呢,哪里出错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 19:24:10 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-14 19:34 编辑

        这么改:
  1. int wanshu(int i)
  2. {
  3.         int j , sum = 0 ;
  4.         if(i > 1)
  5.         {
  6.                 for(sum += 1 , j = 2 ; j < sqrt(i) ; j ++)
  7.                 {
  8.                         if(i % j == 0)
  9.                         {
  10.                                 sum = sum + j + i / j ;
  11.                         }
  12.                 }
  13.         }
  14.         if(sum == i)
  15.         {
  16.                 return 1;
  17.         }
  18.         return 0;
  19. }
复制代码
  1. #include <stdio.h>

  2. bool foo(int n)
  3. {
  4.         int i , sum                   ;
  5.         bool r                        ;
  6.         for(sum = 1 , r = false , i = 2 ; i * i < n + 1 ; i ++) {
  7.                 if(! (n % i)) {
  8.                         sum += i      ;
  9.                         sum += n / i  ;
  10.                 }
  11.         }
  12.         if(sum == n) r = true         ;
  13.         return r                      ;
  14. }

  15. int main(void)
  16. {
  17.         for(int i = 2 ; i < 10000 ; i ++) if(foo(i)) printf("%d\n" , i) ;
  18. }
复制代码

        编译、运行实况:
  1. D:\00.Excise\C>g++ -o x x.c

  2. D:\00.Excise\C>x
  3. 6
  4. 28
  5. 496
  6. 8128

  7. D:\00.Excise\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 19:27:28 | 显示全部楼层
  1. int wanshu(int i)
  2. {
  3.         int j,sum = 0,max=i;
  4.         for(j = 1;j < max;j++)
  5.         {
  6.                 if((i % j) == 0)
  7.                 {
  8.                     max=i/j;
  9.                     sum +=max+j;
  10.                 }
  11.         }
  12.         if((sum-i) == i)
  13.         {
  14.                 return 1;
  15.         }
  16.         return 0;
  17. }

  18. int main(void)
  19. {
  20.         int i;
  21.         for(i =1;i <= 10000;i++)
  22.         {
  23.                 if(wanshu(i))
  24.                 {
  25.                         printf("%d是完数\n",i);
  26.                 }
  27.         }
  28.         return 0;
  29. }
复制代码
  1. 6是完数
  2. 28是完数
  3. 496是完数
  4. 8128是完数
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 19:27:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-11-14 19:30 编辑

请问 6 的平方数是多少?答案是:2.44948974278
请问 6 的最大因数是多少?答案是:3

3 > 2.44948974278,但是你的代码永远找不到 3 就结束循环了(第 8 行代码 和 第 10 行)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 19:31:11 | 显示全部楼层
林江楠 发表于 2021-11-14 19:22
哥,为什莫我的不行呢,哪里出错了


兄弟,如果我的解答对你有帮助,请设最佳解答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-14 19:39:17 | 显示全部楼层
傻眼貓咪 发表于 2021-11-14 19:31
兄弟,如果我的解答对你有帮助,请设最佳解答

那是肯定的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 14:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表