題目連結:
題目大意:
阿姆斯壯數(Armstrong Numbers)定義為一個 n 位數的正整數,其每個位數各自的 n 次方之和恰好等於自身。
例如 1634 = 1 ^ 4 + 6 ^ 4 + 3 ^ 4 + 4 ^ 4
現在給定兩正整數 n 、 m (0 < n < m ≦ 1000000),試問範圍 n(含)~ m(含)之間有哪些阿姆斯壯數?如果沒有任何阿姆斯壯數,則輸出「none」。
範例輸入:
範例輸入 #1
100 999
範例輸入 #2
10 99
範例輸出:
範例輸出 #1
153 370 371 407
範例輸出 #2
none
解題思維:
就是單純地窮舉 n ~ m 之間所有的數字,然後判斷它們是不是阿姆斯壯數:將每個數字拆成多個位數並統計其位數長 d ,最後將每個位數取 d 次方全部相加再判斷是否與原數相同。
不過因為我們會頻繁地使用 0 ~ 9 的各個可能的次方,例如 2 ^ 3 、 2 ^ 4 、 3 ^ 5 、 3 ^ 6 等等。我們可以將這些數字之次方預先計算出來存在一陣列裡。這樣窮舉時,不用額外再次計算每個位數的某某次方。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。