在我们数学王国中,存在着很多有别称的数字,今天我们来认识一位新朋友——“阿姆斯特朗数”。阿姆斯特朗数是数学中的一个概念,多用于计算机语言中,如果一个n位正整数等于其各位数字的n次方之和则称该数为阿姆斯特朗数。 例如1^3 + 5^3 + 3^3 = 153。
已知1000以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。
那么大家肯定会想,我们如何来判断阿姆斯特朗数呢?判断的方法和依据又是什么呢?我们用Scratch來编写一下判断程序,输入一个三位数判断是不是阿姆斯特朗数。
由于仅仅是对三位数判断,难度不高,先判断输入的数字是否为三位数,如果不是,停止所有脚本。
如果是三位数的话继续判断,判断方法有两种供你参考:
1.用到提取字符积木。从回答的结果中直接依次提取字符出来,个位是“‘回答的第一个字符”,十位提取第二个,百位提取第三个。这里我们首次用到了运算中的“…的第…个字符”积木。
2.运算法。假设输入数为456,提取百位数字的方法就是456整除100,结果为4(需要向下取整);提取个位数字的方法是456除以10的余数,结果为6;要提取十位数字需要动脑筋思考一下,要结合整除和取余数两个方法,首先向下取整456除10,结果为45,然后取除以10的余数得到5,就是十位的结果,数学运算的方法比较巧妙。
两种方法均可选择。
然后进行阿姆斯特朗数的判断,个位的三次方+十位的三次方+百位的三次方之和是否等于该数字本身。
Scratch代码通俗易懂,下面进行一次小小的提升尝试,用Python来编写,输入一个数字(不考虑数字的位数)来进行判断是否为阿姆斯特朗数。
这里我们用到while循环,当while=0时结束循环,提取的方法是刚才用到的运算法,从个位开始每次取除10的余数,提取出最后一位数字,然后依次往前高位提取,不要忘记每次的循环结束前除以10并向下取整,否则每次提取的数字都是一样的,循环结束后,进行比较判断是否为阿姆斯特朗数,代码如下:
本题的关键就是把输入数字作为字符串用提取法处理,还是当作数字用整除取余数的运算法处理。