|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. 编写一个程序,求 100~999 之间的所有水仙花数。
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数
- for i in range(100, 1000): #这个能理解,i为100-999中的数
- sum = 0 #提前设置个sum = 0,这个sum表示啥意思呢?水仙花数吗?
- temp = i #这里赋值temp为i,也就是100-999中的数字
- while temp: #while temp是什么意思,是否简写了?其实是while temp == range(100,1000)?
- sum = sum + (temp%10) ** 3 #这个算法看不懂,写的啥意思啊?
- temp //= 10 # 注意这里要使用地板除哦~ #这里temp = int(temp/10) 为什么还要弄个0.1temp?
- if sum == i:
- print(i)
复制代码
整个代码实现的逻辑方式,为什么这样做,我完全摸不着北,求大神给以小白关照!拜托啦!
本帖最后由 jackz007 于 2020-1-10 15:08 编辑
- for i in range(100, 1000):
- sum = 0 # 判断水仙花数需要计算 i 的百位、十位、个位数的立方和,sum 就是用来计算这个立方和的,因为后面需要通过循环累加的方式进行计算,需要为 sum 赋初始值 0。
- temp = i # 后面的计算需要用到 i ,但是,如果直接使用 i, 会破坏 i 值,所以,用 temp 来进行代理,目的是保护 i。
- while temp: # 循环入口,只要 temp 的值不为 0 就循环
- sum = sum + (temp % 10) ** 3 # 这是累加计算,temp % 10 会得到 temp 的个位数值,sum 的初始值是 0,如果是第一次循环,sum = 个位数的立方,第二次循环,sum = 个位数立方 + 十位数立方
- temp //= 10 # 因为已经取到了 temp 的个位数,所以,temp = temp // 10,temp 百位变十位,十位变个位,个位数被丢弃。
- if sum == i: # 如果 i 与 sum 相等
- print(i) # i 就是水仙花数,把它打印出来
复制代码
现以 temp = 578 为例,来展开 while 循环,以加深理解:
- 第 1 次循环:temp = 578,sum = sum + (temp % 10) ** 3 = 0 + 8 ** 3 = 8 ** 3 , temp = temp // 10 = 578 // 10 = 57
- 第 2 次循环:temp = 57,sum = sum + (temp % 10) ** 3 = 8 ** 3 + 7 ** 3 , temp = temp // 10 = 57 // 10 = 5
- 第 3 次循环:temp = 5,sum = sum + (temp % 10) ** 3 = 8 ** 3 + 7 ** 3 + 5 ** 3 , temp = temp // 10 = 5 // 10 = 0
- temp = 0 循环终止,sum = 8 ** 3 + 7 ** 3 + 5 ** 3
复制代码
于是 578 各个位的立方和便这样被计算出来了
|
|