JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで階乗の各桁の合計を計算する方法

本記事では、数値を引数として受け取り、まずその数値の階乗を計算した後、計算結果(階乗)の各桁の数字の合計を返すJavaScript関数の実装方法を解説します。

たとえば、入力が 6 の場合を考えてみましょう。6の階乗は 720 なので、7 + 2 + 0 を計算し、出力は 9 となります。

コード例

const factorial = (num) => {
    if (num == 1) return 1;
    return num * factorial(num-1);
};
const sumOfDigits = (num = 1) => {
    const str = num.toString();
    let sum = 0;
    for (var x = -1; ++x < str.length;) {
        sum += +str[x];
    };
    return sum;
};
const sumFactorialDigits = num => sumOfDigits(factorial(num)); console.log(sumFactorialDigits(6));

コードの仕組み

このコードは、大きく分けて2つの関数で構成されています。

  • factorial関数:再帰処理を使って階乗を計算します。引数が1になった時点で1を返すことで再帰を終了し、それ以外の場合は現在の数値に「その数値から1を引いた値の階乗」を掛け合わせていきます。
  • sumOfDigits関数:受け取った数値を toString() メソッドで文字列に変換し、ループ処理で各文字を単項プラス演算子(+)を使って数値化しながら順番に加算していきます。これにより、各桁の合計が求められます。

最後の sumFactorialDigits 関数は、この2つを組み合わせたもので、「階乗を計算してから桁の合計を求める」という一連の流れを実現しています。

出力結果

上記のコードを実行すると、コンソールには次の出力が表示されます。

9

6の階乗である720の各桁(7・2・0)を足すと9になるため、期待どおりの結果が得られました。

補足:大きな数値の扱いに注意

なお、JavaScriptの Number 型は安全に扱える整数の範囲に上限があるため、大きな数値の階乗では誤差が発生する可能性があります。より大きな数値を扱いたい場合は、BigInt 型を使用することをおすすめします。

  1. JavaScriptで「不器用な階乗(Clumsy Factorial)」問題を解く方法

    通常、正の整数 n の階乗は、n 以下のすべての正の整数をかけ合わせた値として定義されます。例えば、factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 のような形です。 一方、今回取り上げる「不器用な階乗(Clumsy Factorial)」では、整数を降順に並べたうえで、乗算の代わりに「乗算(*)→ 除算(/)→ 加算(+)→ 減算(-)」という固定された順序の演算を繰り返し適用していきます。 例えば、clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 となります。ただし、これらの演

  2. 【初心者向け】JavaScriptでボタンクリック時に数値を加算するSum関数の作り方

    はじめに 本記事では、ボタンをクリックするたびに指定した値を加算していき、結果を画面に表示するシンプルなJavaScriptの「Sum関数」の実装方法を解説します。onclickイベントとparseInt()を組み合わせることで、わずか数行のコードで動的な加算処理を実現できます。 ボタンの準備 まず、以下のようなHTMLボタンを用意します。 <button type=button onclick=addTheValue(10)>Sum</button> このボタンがクリックされると、引数として10を渡して関数 addTheValue(10) が呼び出されます。つま