![每个人的Python:数学、算法和游戏编程训练营](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/44510137/b_44510137.jpg)
上QQ阅读APP看书,第一时间看更新
3.1.2 算法与实现——判断一个数是否为阿姆斯特朗数
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-P55_13336.jpg?sign=1738880427-cmrujzz9vaiEPispZ60xd9vmESRuMGso-0-9d254f97db84a65b8df9035176dd4572)
阿姆斯特朗数虽然有一个美好的名字,但是要判断一个数是不是阿姆斯特朗数确实要动一番脑筋。根据阿姆斯特朗数的特点,我们可以设计程序的算法如下:
(1)首先将一个数中的每一位数字提取出来。
(2)将提取出来的每一位数字与当前数本身的位数进行指数运算并且累加。
(3)比较累加的结果与数字本身是否相同。
按照上面的算法指示,编写代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T55_29653.jpg?sign=1738880427-wvpgqxiqyg9rVTDoQyRwZUEP5zx9ft02-0-dda0ab4452d17284b6cc6d2ded6d8451)
运行上面的代码,通过一些数字进行测试计算,可以发现上面的程序工作基本还算顺利。
上面的isArmstrong函数使用了10行代码来实现判断阿姆斯特朗数的功能。现在我们思考一下,是否可以使用更少的代码来完成这个功能?作为极客工程师,追求极致是一种良好的习惯,其实上面的代码有很大的压缩空间,分析上面的代码,其实很大一部分代码的作用是将参数中的每一位数字拆解出来,使用字符串来完成这个拆解的工作将非常便捷,优化代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T56_29642.jpg?sign=1738880427-nSq9wVKOZqLE0XjNuVbHKrAIXZ7EttQE-0-6f0df8cc5514e6f9cd21abef3177f7fa)
优化后的代码依然可以很好地工作,代码行数却从10行减少到了5行,减少了50%的代码量,成果非常可观。