鱼C论坛

 找回密码
 立即注册
查看: 859|回复: 10

[已解决]第9课动动手求水仙花数

[复制链接]
发表于 2019-7-13 14:48:16 | 显示全部楼层 |阅读模式

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

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

x
欢迎大神解答,谢谢!


如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。
代码如下:
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)

其它的原理都懂,就是     sum = sum + (temp%10) ** 3  这里的代码是怎么算求一个数的各个位置上数的3次方的???,我推演了几个数推不下去了,头疼
                                     temp //= 10         
最佳答案
2019-7-13 15:30:55
本帖最后由 jackz007 于 2019-7-13 15:37 编辑

    为了容易理解,假设 i = 385,那么 temp = 385

    第1次循环:temp = 385   ,   sum = 0 + (385 % 10) ** 3 = 5 ** 3                                                  ,   temp = 385 // 10 = 38  
    第2次循环:temp =  38    ,   sum = 5 ** 3 + (38 % 10) ** 3 = 5 ** 3 + 8 ** 3                              ,   temp = 38 // 10 = 3
    第3次循环:temp =   3     ,   sum = 5 ** 3 + 8 ** 3 + (3 % 10) ** 3 = 5 ** 3 + 8 ** 3 + 3 ** 3   ,   temp = 3 // 10 = 0      
                        temp = 0 循环终止
    所以,最终 sum = 5 ** 3 + 8 ** 3 + 3 ** 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-13 15:02:05 From FishC Mobile | 显示全部楼层
https://fishc.com.cn/forum.php?mod=viewthread&tid=142704&extra=page%3D1&mobile=2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-13 15:14:57 | 显示全部楼层
wp231957 发表于 2019-7-13 15:02
https://fishc.com.cn/forum.php?mod=viewthread&tid=142704&extra=page%3D1&mobile=2

额,这是鱼C论坛吧,里面有人解答了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-13 15:18:15 | 显示全部楼层
# list_1 = list(range(100, 1000))
# for i in list_1:
#     a = i % 10      求出个位数
#     b = (i // 10) % 10   求出十位数
#     c = i // 100     求出百位数
#     if i == c ** 3 + b ** 3 + a ** 3:
#         print(i)
#         continue
这是我的,你可以参考下,我和小甲鱼的不太一样,但是应该对你理解他的有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-13 15:30:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-7-13 15:37 编辑

    为了容易理解,假设 i = 385,那么 temp = 385

    第1次循环:temp = 385   ,   sum = 0 + (385 % 10) ** 3 = 5 ** 3                                                  ,   temp = 385 // 10 = 38  
    第2次循环:temp =  38    ,   sum = 5 ** 3 + (38 % 10) ** 3 = 5 ** 3 + 8 ** 3                              ,   temp = 38 // 10 = 3
    第3次循环:temp =   3     ,   sum = 5 ** 3 + 8 ** 3 + (3 % 10) ** 3 = 5 ** 3 + 8 ** 3 + 3 ** 3   ,   temp = 3 // 10 = 0      
                        temp = 0 循环终止
    所以,最终 sum = 5 ** 3 + 8 ** 3 + 3 ** 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-7-13 15:40:34 | 显示全部楼层
本帖最后由 13572044595 于 2019-7-13 15:42 编辑

% --  取余
// -- 取整
这道题,让你理解 % 和 // 的用法   

sum = 0
temp = 153


sum = sum + (temp%10) ** 3   # sum = sum + (153%10) ** 3,  sum = sum + 3 ** 3,  sum = 0 + 27,  sum = 27
temp //= 10   # temp = temp // 10,  temp = 153 // 10,  temp = 15

再次循环时,temp = 15
sum = sum + (temp%10) ** 3   # sum = sum + (15%10) ** 3,  sum = sum + 5 ** 3,  sum = 27 + 125,  sum = 152
temp //= 10   # temp = temp // 10,  temp = 15 // 10,  temp = 1

再次循环时,temp = 1
sum = sum + (temp%10) ** 3   # sum = sum + (1%10) ** 3,  sum = sum + 1 ** 3,  sum = 152 + 1,  sum = 153
temp //= 10   # temp = temp // 10,  temp = 1 // 10,  temp = 0

再次循环时, temp = 0, while 循环条件为 假, 退出循环此时 sum = 153
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-13 18:25:36 | 显示全部楼层
MMM啊 发表于 2019-7-13 15:18
# list_1 = list(range(100, 1000))
# for i in list_1:
#     a = i % 10      求出个位数

恩恩,谢谢,这样可以看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-13 18:26:08 | 显示全部楼层
jackz007 发表于 2019-7-13 15:30
为了容易理解,假设 i = 385,那么 temp = 385

    第1次循环:temp = 385   ,   sum = 0 + (385 %  ...

可以的,感谢,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-13 18:26:44 | 显示全部楼层
13572044595 发表于 2019-7-13 15:40
% --  取余
// -- 取整
这道题,让你理解 % 和 // 的用法   

辛苦了,谢谢大神的指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-14 09:14:52 | 显示全部楼层
不从心 发表于 2019-7-13 18:25
恩恩,谢谢,这样可以看懂

其实好多题你可以试试自己的思路,然后比对小甲鱼的,哪个简练用哪个,不过大多还是人家的好啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-14 12:30:29 | 显示全部楼层
MMM啊 发表于 2019-7-14 09:14
其实好多题你可以试试自己的思路,然后比对小甲鱼的,哪个简练用哪个,不过大多还是人家的好啊

恩恩,是的,还是要有自己的思维,进步才快
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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