今日はアームストロング数という面白いものを勉強しましょう。
アームストロング数とは何かを理解し、ある数字がアームストロング数であるかどうかをチェックするプログラムを実装してみましょう。
アームストロング番号って何?
n` 桁の数字は、各桁を桁数のべき乗にした和が元の数字と等しいとき、 アームストロング数です。
アームストロング数の定義は次の通り: abcd…(n-digits) = a^n + b^n + c^n + d^n + … …となります。
アームストロング番号の例
例1 : 153
総桁数 = 3
計算(桁数-単位) = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
計算結果は、元の数と直接等しい。
したがって、この数はアームストロング数です。
例2 : 548834
合計桁数 = 6
計算(桁数) = 5^6 + 4^6 + 8^6 + 8^6 + 3^6 + 4^6 = 15625 + 4096 + 262144 + 262144 + 729 + 4096 = 548834
行われた計算はそのまま元の数に等しい。
したがって、この数はアームストロング数です。
アームストロング数の擬似コード
以下のコードは、ある数字がアームストロング数であるかどうかをチェックする疑似コードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
READ n CALCULATE NO OF DIGITS n_digit MAKE A COPY OF n result=0 CHECK DIGIT BY DIGIT: WHILE n!=0
GET CURRENT DIGIT : digit = n % 10
UPDATE RESULT : result = result + digit^(n_digit)
TRIM THE LAST DIGIT : n = n / 10
ENDWHILE
CHECK FOR ARMSTRONG NUMBER: IF result==COPY OF n
PRINT "ARMSTRONG NUMBER"
ELSE
PRINT "NOT AN ARMSTRONG NUMBER"
|
Pythonでアームストロング数チェックを実装する
アームストロング数とは何か、それを実装する手順がわかったところで、一行ずつアームストロングチェックを実装していきましょう。
1. 入力変数を作成する
まず入力 n
を受け取り、入力の長さを計算します。
また、入力のコピーを保存しておくことで、元の数値をどれだけ変更しても、後でアームストロングの数値を確認できるようにしている。
また、結果は0として初期化しました。
以下はそのコードです。
1
2
3
4
5
|
n = input ()
n_digit = len (n)
n = int (n)
copy_n = n
result = 0
|
2. 数値のトラバースと結果の更新
各桁にアクセスするために、数値のモジュラス( mod 10 )を取って、数値の最後の桁を抽出します。
次のステップでは、前の結果と桁数の累乗の和として結果を更新します。
最後に行うのは、数字を10で割って最後の一桁を数字から落とすことです。
同じ処理を数字の桁数がなくなるまで繰り返す。
以下は、そのコードです。
1
2
3
4
|
while (n! = 0 ):
digit = n % 10
result = result + pow (digit,n_digit)
n = int (n / 10 )
|
3. 数字がアームストロング数かどうかの確認
最後に、先ほど作成した数字のコピーと計算結果を照らし合わせて、最終的にその数字がアームストロング数であるかどうかを判断します。
そのためのコードを以下に示す。
1
2
3
4
|
if (result = = copy_n):
print ( "Armstrong Number!" )
else :
print ( "Not an Armstrong Number!" )
|
コードの出力サンプル
とりあえず、4つの入力に対してプログラムをテストしてみました。
4つの出力は以下のとおりです。
番号1:153
153 Armstrong Number! |
番号 2: 121
121 Not an Armstrong Number! |
Number 3: 548834
Fake tag
Number 4: 9468632
Fake tag
まとめ
しかし、ここで立ち止まらないでください! 読み続けて学んでください!