Loading... 先看要求: <div class="tip inlineBlock info"> 编写一个程序,求解 100~999 之间的所有水仙花数。 </div> > 科普: > > 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。 程序实现如下:  ```python for i in range(100, 1000): sum = 0 temp = i while temp: sum = sum + (temp % 10) ** 3 temp //= 10 if sum == i: print(i) ``` 以上是包含着奇妙算法的程序。从作为初学者的我的角度来看,水仙花数可以直接提取`hundreds` `tens` `units`三种数字进行`pow()`运算,事实上确实可以做到,并且很好理解。上面的代码算是入门级别的算法。接下来就要对其进行剖分,本质上是一层一层剥洋葱。 ```mermaid graph TD 源数据i-->temp temp-->取余得到的个位与3pow加到sum temp-->与10地板除得到前两位数 与10地板除得到前两位数-->取余得到的十位与3pow加到sum 与10地板除得到前两位数-->与10地板除得到前一位数 与10地板除得到前一位数-->取余得到的百位与3pow加到sum 取余得到的个位与3pow加到sum-->sum 取余得到的十位与3pow加到sum-->sum 取余得到的百位与3pow加到sum-->sum sum-->与源数据i进行比较 ``` 同理,通过这种形式得到的`hundreds` `tens` `units`可以用来做别的事情,例如将数字倒转。 ```python x = int(input("输入一个数字:")) revertedNumber = 0 while x > 0: revertedNumber = revertedNumber * 10 + x % 10 x //= 10 print(revertedNumber) ``` 该例子与水仙花类似,相同的是提取各个位上的数字方法,都是利用了`x //= 10`,不过不同的是如何处理数据,这种算法要有印象,用到使用不同位上的数字时要学会使用。 最后修改:2023 年 08 月 13 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏