問題
k 桁の数が、各桁の値を k 乗して合計した値とその数自身が等しい場合、その数はアームストロング数です。例えば、153 = 1³ + 5³ + 3³ です。
is_armstrong(n) を実装してください。
入力
n: 非負の整数。
出力
n がアームストロング数であれば true を返してください。
制約
0 ≤ n ≤ 10¹⁸
例
例 1
入力:
n = 153
期待される出力:
expected = True
入力:
long long n = 153;
期待される出力:
bool expected = true;
入力:
long n = 153;
期待される出力:
bool expected = true;
解説
1³ + 5³ + 3³ = 1 + 125 + 27 = 153。
例 2
入力:
n = 10
期待される出力:
expected = False
入力:
long long n = 10;
期待される出力:
bool expected = false;
入力:
long n = 10;
期待される出力:
bool expected = false;
解説
1² + 0² = 1 であり、10 ではありません。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
数字の個数を数えてから、各桁の累乗を足す。
ヒント 2
元の数と、各桁を桁数回べき乗した合計を比べる。
ヒント 3
0は1桁の特別なケースとして扱う。
目安の計算量
時間 O(k)、追加メモリ O(1)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。