鱼C论坛

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

[已解决]水仙花数

[复制链接]
发表于 2017-3-21 20:47:57 | 显示全部楼层 |阅读模式

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

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

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)



(temp%10) ** 3表示的是最后一个数字得三次方 那sum为什么表示的是前两个数的三次
最佳答案
2017-3-21 21:35:55
  1. for i in range(998, 999):
  2.     sum1 = 0
  3.     temp = i
  4.     while temp:
  5.         sum1 = sum1 + (temp%10)**3
  6.         print('temp%10 =', temp%10)
  7.         temp //= 10
  8.         print('地板除后的temp', temp)
  9.         
  10.         
复制代码


这张图,我取得temp =998
while 第一次循环  sum1 = 0 + (998%10)**3  这是不是个位数的三次方;然后 temp=998 进行地板除 temp=99 对吧

while 99 :这个属于真吧,继续第二次循环, sum1 = (998%10)**3(这是第一次循环留下来的值)  + (99%10)**3  ;(99%10)是不是取9,也就是998的十位上面的数 ;然后temp=99 再进行地板除 temp=9喽

while 9: 这个条件又为真对吧,继续第三次循环,  sum1 = (998%10)**3 + (99%10)**3 +(9%10)**3    然后temp=9 又进行地板除,temp=0 喽

while 0: 这个条件不是真,所以不执行循环,是不是跳出while ,执行下一次for循环了,然后sum1 在for循环里会被附初值0

这边特别要注意的是 在while循环没结束之前 sum1的值一直都是叠加的哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-21 21:01:01 | 显示全部楼层

第一次while
sum = sum + (temp%10) ** 3
        = 0 +个位数的三次方
temp //= 10  ##取出了temp里的百位和十位
第二次while 循环
sum = sum + (temp%10) ** 3
        = 个位数的三次方 + 十位数的三次方
temp //= 10  ## 取除了百位数
第三次循环
sum(个位**3 + 十位**3) + 百位**3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-21 21:35:55 | 显示全部楼层    本楼为最佳答案   
  1. for i in range(998, 999):
  2.     sum1 = 0
  3.     temp = i
  4.     while temp:
  5.         sum1 = sum1 + (temp%10)**3
  6.         print('temp%10 =', temp%10)
  7.         temp //= 10
  8.         print('地板除后的temp', temp)
  9.         
  10.         
复制代码


这张图,我取得temp =998
while 第一次循环  sum1 = 0 + (998%10)**3  这是不是个位数的三次方;然后 temp=998 进行地板除 temp=99 对吧

while 99 :这个属于真吧,继续第二次循环, sum1 = (998%10)**3(这是第一次循环留下来的值)  + (99%10)**3  ;(99%10)是不是取9,也就是998的十位上面的数 ;然后temp=99 再进行地板除 temp=9喽

while 9: 这个条件又为真对吧,继续第三次循环,  sum1 = (998%10)**3 + (99%10)**3 +(9%10)**3    然后temp=9 又进行地板除,temp=0 喽

while 0: 这个条件不是真,所以不执行循环,是不是跳出while ,执行下一次for循环了,然后sum1 在for循环里会被附初值0

这边特别要注意的是 在while循环没结束之前 sum1的值一直都是叠加的哦
123.png

评分

参与人数 1鱼币 +1 收起 理由
家丁 + 1 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-3-22 18:23:55 | 显示全部楼层
ButcherRabbit 发表于 2017-3-21 21:35
这张图,我取得temp =998
while 第一次循环  sum1 = 0 + (998%10)**3  这是不是个位数的三次方;然后  ...

请问为什么要把i重命名为temp呢?我尝试不重用名是没有结果输出来的?这是为什么呢?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-22 18:36:45 | 显示全部楼层
ZYM111 发表于 2017-3-22 18:23
请问为什么要把i重命名为temp呢?我尝试不重用名是没有结果输出来的?这是为什么呢?谢谢

i要重命名为temp的原因是不是:如果直接用i参与运算,当temp//=10运算时

结果不在range(100,1000)范围内,所以不再执行while循环,所以是没有

值输出的。

不知道对不对 新手上路求指教呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 09:19:12 | 显示全部楼层
ZYM111 发表于 2017-3-22 18:23
请问为什么要把i重命名为temp呢?我尝试不重用名是没有结果输出来的?这是为什么呢?谢谢

为了使 for i in range():这个for循环里的I不便,

你想想如果不加一个中间变量temp ,

while i :
  sum = sum + (i%10)**3
  i //= 10      #这里i就会被重新赋值哦,此刻for循环里的i 就不等于 while 循环里的i了

while 这个循环是不是会把i的值重新赋值,那么在if sum == i 这里的i就会是while里面出来的i,这个判断就不会成立哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 21:17:43 | 显示全部楼层
for i in range(100, 1000):
    b = i // 100
    s = (i - b * 100) // 10
    g = i - b * 100 - s * 10
    if ((g ** 3) + (s ** 3) + (b ** 3)) == i:
        print(i)
    i += (g + s + b)

俺研究半天才搞出来的
唉。。。。。。
灰心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-8 09:30:40 | 显示全部楼层
ButcherRabbit 发表于 2017-3-21 21:35
这张图,我取得temp =998
while 第一次循环  sum1 = 0 + (998%10)**3  这是不是个位数的三次方;然后  ...

谢谢!!!学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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