鱼C论坛

 找回密码
 立即注册
查看: 919|回复: 8

[已解决](100,1000)之间的水仙花数的程序理解问题

[复制链接]
发表于 2018-12-22 22:01:36 | 显示全部楼层 |阅读模式

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

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

x
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3                  这个步骤市什么意思?
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)
求大神解释下整体的逻辑,大脑短路了转不过来了,谢谢了
最佳答案
2018-12-22 22:47:17
本帖最后由 罗同学 于 2018-12-22 22:49 编辑

是这句没有get到嘛
  1. sum = sum + (temp%10) ** 3
复制代码

水仙花数的含义楼主应该知道吧,就是一个三位数每一位的立方和同于本身,也就是要计算每一位的立方,一个数对10取余就可以得到他的各位,比如153,对10取余就是3,然后再把153地板除10就得到15,15对10取余得到5,15地板除10得到1,1对10取余还是1,1地板除10得到0 ,不满足while循环条件,循环结束,1、5、3、的立方求和还是153,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-22 22:12:37 | 显示全部楼层
任何大于0的整数都可以解释为True,这里是把100到999的每个数字进行了一遍while循环。因为这是一个三位数,每次地板10,说明这个循环会进行三次。第一次是以完整的三位数出现的,求余10就得出了它的个位。第二次因为地板除了10,所以求余10就得出了它的十位(一个三位数地板除10后,把小数点去掉剩下的两位数就是原先的百位和十位),第三次再进行了一遍地板除,剩下的只有它的百位了,求余10也就得到了它的百位。sum以次加上了这个数各位的立方和,这正是水仙花的条件,用它去比较最初的三位数,如果一样,就说明这是一个水仙花数,把它打印出来。这样把所有的三位数都试一遍也就得出了所有的水仙花数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-22 22:47:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 罗同学 于 2018-12-22 22:49 编辑

是这句没有get到嘛
  1. sum = sum + (temp%10) ** 3
复制代码

水仙花数的含义楼主应该知道吧,就是一个三位数每一位的立方和同于本身,也就是要计算每一位的立方,一个数对10取余就可以得到他的各位,比如153,对10取余就是3,然后再把153地板除10就得到15,15对10取余得到5,15地板除10得到1,1对10取余还是1,1地板除10得到0 ,不满足while循环条件,循环结束,1、5、3、的立方求和还是153,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 01:12:39 | 显示全部楼层
本帖最后由 Stubborn 于 2018-12-23 01:16 编辑

  1. for i in range(100, 1000):  #看代码一步一步来
  2.     sum = 0
  3.     temp = i
  4.     while temp:   #通过三次while输出Flase循环得到个位,十位,百位,然后赋予sum.终于看明白流程了,原来是这样走流程的
  5.         sum = sum + (temp%10) ** 3      
  6.         temp //= 10         
  7.     if sum == i:
  8.         print(i)
复制代码


可注释看不懂以看下这个:https://fishc.com.cn/thread-127039-1-1.html
下面这个是我学到这里自己写的
  1. def nice ():
  2.         "求水仙花数"
  3.         for each in range(100,1000):
  4.                 temp = each
  5.                 temp1 = 0
  6.                 while temp1:
  7.                         sum1 = temp//100  #百位数
  8.                         sum2 = (temp-sum1*100)//10  #十位数
  9.                         sum3 = temp%10   #个位数
  10.                         temp1 = sum1**3+sum2**3+sum3**3
  11.                 if temp1 == each:
  12.                         print(each,end="\t")
  13. print("所有的水仙花数分别是:", end='')
  14. nice()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 09:14:58 | 显示全部楼层
看不明白可以看这个帖子:戳我前进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 09:58:41 | 显示全部楼层
我今天又碰到问这个问题的了,我就偷个懒了你直接看看着里的回答吧:
https://fishc.com.cn/forum.php?mod=viewthread&tid=105546
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-27 12:42:13 | 显示全部楼层
Stubborn 发表于 2018-12-23 01:12
可注释看不懂以看下这个:https://fishc.com.cn/thread-127039-1-1.html
下面这个是我学到这里自己写 ...

你这个不对,temp1永远为真,会一直执行while循环,不会执行接下去的if,最后得不出答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-27 16:11:57 | 显示全部楼层
沐光之晨 发表于 2018-12-27 12:42
你这个不对,temp1永远为真,会一直执行while循环,不会执行接下去的if,最后得不出答案

改下缩加个break写了好久了 没注意看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-2 22:00:23 | 显示全部楼层
罗同学 发表于 2018-12-22 22:47
是这句没有get到嘛
水仙花数的含义楼主应该知道吧,就是一个三位数每一位的立方和同于本身,也就是要计算 ...

十分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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