本帖最后由 自然水 于 2017-3-16 01:03 编辑
- for i in range(100, 1000):
-     sum = 0
-     temp = i
-     while temp:
-         sum = sum + (temp % 10) ** 3
-         temp //= 10
-     if sum == i:
-         print(i)
复制代码
我们用大脑+笔来循环一下:
假设咱们i 循环到了153
第一轮while:
- sum = sum + (temp % 10) ** 3
- sum = 0 + (153 % 10 ) **3
复制代码
#这里,153%10 计算出了个位数,也就是3 ,那么 sum = 27
- temp //= 10
- # 将temp 进行10的底板除,并赋值到 temp
- #temp = 15
- #其实就是求得了前2位数
复制代码
第二轮while 因为 temp = 15 所以条件为真,继续循环
- sum = 27 + (15 % 10) ** 3
- #咱们已知27是个位数的三次方,接着和十位数的三次方(15%10得到了5,也就是十位数) 进行相加 27+(5^3 =125) = 152
- #(假设个位十位 百位,分别为 abc,那么现在已经完成了a^3 + b^3了)
- temp //= 10
- #上一轮测试中 temp = 15 , 15 // 10 = 1 (直接去除小数点后面的数值,求得了百位的数值)
复制代码
同上,因为while =1 所以条件成立,继续循环:
- sum = 152 + (1 % 10) ** 3
- #我们现在加上c^3就可以啦!
- temp //= 10
- #1底板除为0 ,可以终止循环了。
复制代码
这时候 a + b + c 已经完成,且赋值到了sum ,如果 sum = i 提取出来的数字,那么就是水仙花数啦~
应该很详细了吧? 求个最佳~