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