kostumブログ

勉強したことやノート代わりのアウトプットに使っています。

project Euler 020

環境

問題

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 も各位の数字の和に関する問題です。解いていない方は解いてみてください。

考え方

  1. 100!を計算する(bigint型)。
  2. 計算結果の各位の数字を取り出す
  3. 和を計算する

コード

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型を使う)
  • 計算結果を文字列に変換し、各位の数を取り出す
  • 取り出した文字を数字に再変換し、和を計算する