鱼C论坛

 找回密码
 立即注册
查看: 1439|回复: 2

[已解决]关于求解完数

[复制链接]
发表于 2022-6-14 07:11:12 | 显示全部楼层 |阅读模式

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

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

x
"""问题描述,如果一个数等于它的因子之和,则称该数为完数,如6的因子为1,2,3,而6=1+2+3,故6为完数"""
在下面代码中,设置i_add变量用于存储所有因子之和,但为什么i_add的位置不同,执行结果就完全不一样呢,请大咖们给予解答,感谢!

  1. num = int(input("你想输出多少以内的完数:"))
  2. count = 0
  3. # i_add = 0  # 该变量在for循环外,和循环内,效果完全不一样!!

  4. for num in range(1, num+1):
  5.     i_add = 0  # 该变量在for循环外,和循环内,效果完全不一样!!
  6.     for i in range(1, num):
  7.         if num % i == 0:
  8.             i_add += i
  9.     if num == i_add:
  10.         print(f"{num}是完数")
  11.         count += 1
  12. print(f"{num}以内有完数{count}个")
复制代码
最佳答案
2022-6-14 09:59:05
i_add 在 for 循环外面,初始化(设 0)只有 1 次
i_add 在 for 循环里面,每次循环都初始化(设 0),其初始化次数和循环次数相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-14 09:59:05 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
i_add 在 for 循环外面,初始化(设 0)只有 1 次
i_add 在 for 循环里面,每次循环都初始化(设 0),其初始化次数和循环次数相同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-14 10:04:12 | 显示全部楼层
你放在外面的话,i_add 经过一次for以后不会清零
例如i_add经过一次循环后变成1,再次循环后i_add的值是从1开始的,这样就会影响你后面 num==i_add的结果
因为判断第一个数是不是因数(前一个循环)的值被加到后一个循环里面了(判断第二个数是不是因数)

而放在里面,每次判断完一个数后,i_add又归零,重新开始计算再判断就可行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 20:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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