環境
問題
n × (n - 1) × ... × 3 × 2 × 1 を n! と表す.
例えば, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 となる.この数の各桁の合計は 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 である.
では, 100! の各位の数字の和を求めよ.
注: Problem 16 も各位の数字の和に関する問題です。解いていない方は解いてみてください。
考え方
- 100!を計算する(bigint型)。
- 計算結果の各位の数字を取り出す
- 和を計算する
コード
let n = BigInt(100); let sum = BigInt(1); for (let i = n; n > BigInt(0); n--) { sum = sum * n; } let array = []; for (let j = 0; j <= String(sum).length; j++) { array.push(String(sum).charAt(j)); } return array.reduce((a, b) => { return String(Number(a) + Number(b)); });
説明
- 100!を計算する(number型では計算できないため、bigint型を使う)
- 計算結果を文字列に変換し、各位の数を取り出す
- 取り出した文字を数字に再変換し、和を計算する