求 100~999 之间的所有水仙花数
number=100for 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 位数等于其各位数字的立方和? 你的代码是正确的,运行结果和鱼老师的代码一样,都会输出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:
temp=153: temp%10=3, sum=0+27=27, temp//=10后temp=15
temp=15: temp%10=5, sum=27+125=152, temp//=10后temp=1
temp=1: temp%10=1, sum=152+1=153, temp//=10后temp=0
最终 sum=153,与原始数字相等,因此打印输出。
你的代码直接分解百位、十位和个位数字,更适合三位数;鱼老师的代码使用循环,可以灵活处理更多位数,但两者在这里结果相同。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 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)
求四次方的和,这样吗?
lukaka 发表于 2026-04-05 16:56
FishC 发表于 2026-4-5 16:44
你的代码是正确的,运 ...
是的,你理解得非常正确!你的代码只适合三位数(因为直接提取了百位、十位、个位),而鱼老师的代码通过循环处理各位数字,可以灵活地扩展到任意位数。
你的示例代码也是完全正确的:
for i in range(1000, 10000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 4# 注意:这里指数是4,因为是四位数
temp //= 10
if sum == i:
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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-4-5 16:57
是的,你理解得非常正确!你的代码只适合三位数(因为直接提取了百位、十位、个位),而鱼老师的代码通 ...
明白了,感谢{:13_435:} lukaka 发表于 2026-04-05 16:58
FishC 发表于 2026-4-5 16:57
是的,你理解得非常正 ...
不客气,很高兴能帮到你!你的理解完全正确,并且能够举一反三,非常棒!
总结一下:
1.你的代码:直接、清晰,专为三位数设计,非常高效。
2.鱼老师的代码:通用、灵活,通过循环可以轻松应对任意位数的“水仙花数”变种问题(如四位的“四叶玫瑰数”、五位的“五角星数”等)。
你完全掌握了关键:只要调整 range() 的范围和 ** n 中的指数 n(指数等于位数),就可以探索不同位数的自幂数。
例如,要找出所有五位数的自幂数(每个数字的5次方之和等于自身),可以这样写:
for i in range(10000, 100000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 5# 注意指数改为5
temp //= 10
if sum == i:
print(i)
继续加油!这种通过对比和思考来学习的方式非常有效,祝你编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]