在我們數(shù)學王國中,存在著很多有別稱的數(shù)字,今天我們來認識一位新朋友——“阿姆斯特朗數(shù)”。阿姆斯特朗數(shù)是數(shù)學中的一個概念,多用于計算機語言中,如果一個n位正整數(shù)等于其各位數(shù)字的n次方之和則稱該數(shù)為阿姆斯特朗數(shù)。 例如1^3 + 5^3 + 3^3 = 153。
已知1000以內(nèi)的阿姆斯特朗數(shù): 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。
那么大家肯定會想,我們?nèi)绾蝸砼袛喟⒛匪固乩蕯?shù)呢?判斷的方法和依據(jù)又是什么呢?我們用Scratch來編寫一下判斷程序,輸入一個三位數(shù)判斷是不是阿姆斯特朗數(shù)。
由于僅僅是對三位數(shù)判斷,難度不高,先判斷輸入的數(shù)字是否為三位數(shù),如果不是,停止所有腳本。
如果是三位數(shù)的話繼續(xù)判斷,判斷方法有兩種供你參考:
1.用到提取字符積木。從回答的結(jié)果中直接依次提取字符出來,個位是“‘回答的第一個字符”,十位提取第二個,百位提取第三個。這里我們首次用到了運算中的“…的第…個字符”積木。
2.運算法。假設輸入數(shù)為456,提取百位數(shù)字的方法就是456整除100,結(jié)果為4(需要向下取整);提取個位數(shù)字的方法是456除以10的余數(shù),結(jié)果為6;要提取十位數(shù)字需要動腦筋思考一下,要結(jié)合整除和取余數(shù)兩個方法,首先向下取整456除10,結(jié)果為45,然后取除以10的余數(shù)得到5,就是十位的結(jié)果,數(shù)學運算的方法比較巧妙。
兩種方法均可選擇。
然后進行阿姆斯特朗數(shù)的判斷,個位的三次方+十位的三次方+百位的三次方之和是否等于該數(shù)字本身。
Scratch代碼通俗易懂,下面進行一次小小的提升嘗試,用Python來編寫,輸入一個數(shù)字(不考慮數(shù)字的位數(shù))來進行判斷是否為阿姆斯特朗數(shù)。
這里我們用到while循環(huán),當while=0時結(jié)束循環(huán),提取的方法是剛才用到的運算法,從個位開始每次取除10的余數(shù),提取出最后一位數(shù)字,然后依次往前高位提取,不要忘記每次的循環(huán)結(jié)束前除以10并向下取整,否則每次提取的數(shù)字都是一樣的,循環(huán)結(jié)束后,進行比較判斷是否為阿姆斯特朗數(shù),代碼如下:
本題的關(guān)鍵就是把輸入數(shù)字作為字符串用提取法處理,還是當作數(shù)字用整除取余數(shù)的運算法處理。