水仙花数的代码看不太懂,请帮忙解释一下吧
for i in range(100,1000):sum = 0
temp = i
while temp:
sum = sum + (temp % 10) ** 3
temp //= 10
if sum == i:
print(i)
我现在知道这个代码是怎么运行的,但是这个代码怎么与这个公式 153=1^3+5^3+3^3 等价呢? 本帖最后由 风过无痕1989 于 2020-12-30 10:31 编辑
将 153 拆分成百位、十位、个位上的数,再分别求其立方,判断三个立方和是否等于该数,若是就是水仙数花,若相等就不是水仙花数
就153而言:1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
下一个水仙花数是 370 = 3^3 + 7^3 +0^3 = 27 + 343 + 0
371 =3^3 + 7^3 +1^3 = 27 + 343 + 1
407 = 4^3 + 0^3 +7^3 = 64 + 0 + 343
1000 以内就这四个水仙花数
将循环变量赋给 temp,然后 temp % 10 取得个位上的数,将该数求立方后赋给 sum,再将 temp 除 10,便是取十位上的数,立方后与之前的个位上的立方相加,再一次除 10,就是取百位上的数,立方后与 sum (此时的和是个位与十位上的数的立方和)相加,于是,便求得了三个位上的立方和 for i in range(100, 1000):#遍历100到1000所有整数
sum = 0#定义求和变量,初值为0
temp = i
while temp:#当i得值不等于0时,一直循环
sum = sum + (temp%10) ** 3 #temp取余10得到最后一位的数值,sum等于temp各位数之和
temp //= 10 # 注意这里要使用地板除 这里得到temp的前两位
if sum == i: #判断i是否等于其各位数的三次方之和
print(i)#打印满足情况的i得值 本帖最后由 jackz007 于 2020-12-30 14:03 编辑
for i in range(100,1000):
sum = 0 # sum 用于在内循环中累加,开始前,先对其清 0
temp = i # i 在内循环中需要修改, 而 i 还有用,所以增加临时变量 temp 代替 i
while temp: # 内循环入口,只要 temp 不为 0 值就开始或继续循环
sum = sum + (temp % 10) ** 3 # 取出 temp 的个位数求取立方后与 sum 累加
temp //= 10 # temp = temp // 10 , 个位数被舍弃。其效果,temp 向右移动一个 10 进制位,比如,139,右移 1 位后,成为 13,9 被舍弃
if sum == i: # 循环结束,如果 i 的个、十、百位数的立方和与 i 相等
print(i) # i 就是一个"水仙花数 明白了,谢谢大家的帮助{:7_113:} 这个原理就是把100到1000内,从100开始每次增一个单位的三次方 比如1001**3第二个是100加2**3 以此类推,所有数据完毕后!再跟sum也就是和对比,是的就打印出来 sum = sum + (temp % 10) ** 3
temp //= 10
这两句为什么不能合成一句呢?
sum == int(temp%10)**3 + int(temp%100)**3 + int(temp/10%10)**3 你看这样 能不能看懂
for x in range(1,9):
for y in range(0,9):
for z in range
(0,9):
if x*100 + y*10 + z == x**3 + y**3 + z**3:
print(x*100 + y*10 + z)
小时候可帅了 发表于 2021-4-19 23:47
你看这样 能不能看懂
for x in range(1,9):
for y in range(0,9):
复制的有问题 ,大概就是这样 感觉能好理解些
页:
[1]