鱼C论坛

 找回密码
 立即注册
查看: 47|回复: 5

[已解决]求 100~999 之间的所有水仙花数

[复制链接]
发表于 6 小时前 | 显示全部楼层 |阅读模式

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

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

x
number=100
for number in range(100,1000):
    x=number//100
    y=number//10%10
    z=number%10
    if number == x**3+y**3+z**3:
        print(number)
我是这样写的代码,是否可以,运行求的结果一样
因为鱼老师的代码,我没有看明白
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 位数等于其各位数字的立方和?
最佳答案
6 小时前
你的代码是正确的,运行结果和鱼老师的代码一样,都会输出100到999之间的所有水仙花数(即各位数字的立方和等于该数本身的三位数)。

关于地板除:// 是Python中的整数除法运算符,它会向下取整到最接近的整数。例如:
5 // 2 结果是2
-5 // 2 结果是-3
在鱼老师的代码中,temp //= 10 相当于 temp = temp // 10,作用是去掉 temp 的最后一位数字。

对于 sum = sum + (temp%10) ** 3
- temp%10 获取 temp 的最后一位数字(余数)。
- ** 3 计算该数字的立方。
- 循环中不断累加每位数字的立方,直到 temp 变为0。
例如,对于数字153:
  1. temp=153: temp%10=3, sum=0+27=27, temp//=10后temp=15
  2. temp=15: temp%10=5, sum=27+125=152, temp//=10后temp=1
  3. temp=1: temp%10=1, sum=152+1=153, temp//=10后temp=0
复制代码

最终 sum=153,与原始数字相等,因此打印输出。

你的代码直接分解百位、十位和个位数字,更适合三位数;鱼老师的代码使用循环,可以灵活处理更多位数,但两者在这里结果相同。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 6 小时前 | 显示全部楼层    本楼为最佳答案   
你的代码是正确的,运行结果和鱼老师的代码一样,都会输出100到999之间的所有水仙花数(即各位数字的立方和等于该数本身的三位数)。

关于地板除:// 是Python中的整数除法运算符,它会向下取整到最接近的整数。例如:
5 // 2 结果是2
-5 // 2 结果是-3
在鱼老师的代码中,temp //= 10 相当于 temp = temp // 10,作用是去掉 temp 的最后一位数字。

对于 sum = sum + (temp%10) ** 3
- temp%10 获取 temp 的最后一位数字(余数)。
- ** 3 计算该数字的立方。
- 循环中不断累加每位数字的立方,直到 temp 变为0。
例如,对于数字153:
  1. temp=153: temp%10=3, sum=0+27=27, temp//=10后temp=15
  2. temp=15: temp%10=5, sum=27+125=152, temp//=10后temp=1
  3. temp=1: temp%10=1, sum=152+1=153, temp//=10后temp=0
复制代码

最终 sum=153,与原始数字相等,因此打印输出。

你的代码直接分解百位、十位和个位数字,更适合三位数;鱼老师的代码使用循环,可以灵活处理更多位数,但两者在这里结果相同。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 小时前 | 显示全部楼层
FishC 发表于 2026-4-5 16:44
你的代码是正确的,运行结果和鱼老师的代码一样,都会输出100到999之间的所有水仙花数(即各位数字的立方和 ...


也就是说我的代码只适合3位数的,而老师的代码可以是更多位的,比如:
for i in range(1000, 10000):
    sum = 0                     
    temp = i
    while temp:
        sum = sum + (temp%10) ** 4
        temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
        print(i)
求四次方的和,这样吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 小时前 | 显示全部楼层
lukaka 发表于 2026-04-05 16:56
FishC 发表于 2026-4-5 16:44
你的代码是正确的,运 ...


是的,你理解得非常正确!你的代码只适合三位数(因为直接提取了百位、十位、个位),而鱼老师的代码通过循环处理各位数字,可以灵活地扩展到任意位数。

你的示例代码也是完全正确的:

  1. for i in range(1000, 10000):
  2.     sum = 0                     
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 4  # 注意:这里指数是4,因为是四位数
  6.         temp //= 10
  7.     if sum == i:
  8.         print(i)
复制代码

这段代码就是用来寻找1000~9999之间,其各位数字的4次方和等于它本身的数(有时被称为“四叶玫瑰数”)。

关键点在于:
1. temp%10 总是获取当前数字的个位数。
2. temp //= 10 让数字不断去掉个位(例如 1234 -> 123)。
3. 循环条件 while temp: 会处理完所有位数,直到 temp 变成 0。
4. 对于一个 n 位数,其每一位的指数就是 n。所以:
   - 三位数用 **3
   - 四位数用 **4
   - 五位数用 **5,依此类推。

所以,鱼老师代码的通用性在于,只要调整指数和数字范围,就可以寻找任意位数的这类数字。你的代码则是针对三位数情况一个更直接的写法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 小时前 | 显示全部楼层
FishC 发表于 2026-4-5 16:57
是的,你理解得非常正确!你的代码只适合三位数(因为直接提取了百位、十位、个位),而鱼老师的代码通 ...

明白了,感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 小时前 | 显示全部楼层
lukaka 发表于 2026-04-05 16:58
FishC 发表于 2026-4-5 16:57
是的,你理解得非常正 ...


不客气,很高兴能帮到你!你的理解完全正确,并且能够举一反三,非常棒!

总结一下:

1.  你的代码:直接、清晰,专为三位数设计,非常高效。
2.  鱼老师的代码:通用、灵活,通过循环可以轻松应对任意位数的“水仙花数”变种问题(如四位的“四叶玫瑰数”、五位的“五角星数”等)。

你完全掌握了关键:只要调整 range() 的范围和 ** n 中的指数 n(指数等于位数),就可以探索不同位数的自幂数。

例如,要找出所有五位数的自幂数(每个数字的5次方之和等于自身),可以这样写:

  1. for i in range(10000, 100000):
  2.     sum = 0
  3.     temp = i
  4.     while temp:
  5.         sum = sum + (temp%10) ** 5  # 注意指数改为5
  6.         temp //= 10
  7.     if sum == i:
  8.         print(i)
复制代码

继续加油!这种通过对比和思考来学习的方式非常有效,祝你编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-5 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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