JavaScriptで階乗から元の数値を逆算して求める方法
本記事では、数値を唯一の引数として受け取り、その数値が「ある整数の階乗」と一致するかどうかを判定するJavaScript関数の作成方法を解説します。
問題の概要
作成する関数には、以下の要件があります。
- 引数として受け取った数値と等しい階乗を持つ整数が存在するかどうかを確認する
- 該当する整数が存在する場合は、その整数を返す
- 存在しない場合は、
-1を返す
例えば、入力が 720 の場合を見てみましょう。
const num = 720;
720 = 6 × 5 × 4 × 3 × 2 × 1 = 6! となるため、期待される出力は 6 です。
const output = 6;
実装コード
以下が実際のコード例です。
const num = 720;
const checkForFactorial = num => {
let prod = 1, count = 1;
while(prod <= num){
if(prod === num){
return count;
};
count++;
prod *= count;
};
return -1;
};
console.log(checkForFactorial(num));
console.log(checkForFactorial(6565));
コードの解説
この関数は、次のような流れで動作します。
- 累積値
prodとカウンターcountをそれぞれ1で初期化します。 prodが入力値num以下である間、ループを繰り返します。- 各ループ内で
prodがnumと一致すれば、その時点のcount(つまり階乗の元となる整数)を返します。 - 一致しなければ
countをインクリメントし、prodに掛け合わせて階乗を計算していきます。 prodがnumを超えた時点で、該当する整数は存在しないと判断し、-1を返します。
このアプローチでは、1から順に階乗を計算しながら比較するため、無駄な計算を行わずに効率的に答えを導き出せます。
出力結果
上記のコードを実行すると、コンソールには以下のように出力されます。
6 -1
最初の呼び出しでは 720 = 6! なので 6 が返され、2番目の呼び出しでは 6565 はどの整数の階乗にも一致しないため -1 が返されます。
-
JavaScriptで1からnまでのすべての数値で割り切れる最小の数値を求める方法
問題 数値 n を引数として受け取る JavaScript 関数を作成する必要があります。この関数は、1 から n までのすべての整数で割り切れる最小の正の整数を求めて返します。 実は、この問題は数学における「最小公倍数(LCM)」を求める問題と同じです。1 から n までのすべての数値の最小公倍数こそが、求めるべき答えとなります。 例 n = 10 の場合を考えてみましょう。2520 という数値は、1・2・3・…・10 のすべての数値で余りなく割り切ることができる、最も小さい数値です。 以下のコードを見てみましょう − const num = 11; const smallestDivis
-
JavaScriptで数値の階乗の桁数を求める方法
問題JavaScriptで、数値 num を唯一の引数として受け取る関数を作成することを考えます。この関数は、num の階乗(n!)が何桁になるかを計算し、その桁数を返す必要があります。たとえば、関数への入力が次のような場合を考えてみましょう。入力const num = 7;出力const output = 4;出力の解説7! = 5040 であり、5040は4桁の数字であるため、結果は 4 となります。アプローチ:対数を使った賢い計算方法一見すると、階乗を直接計算して文字列の長さを数えればよさそうに思えます。しかし、階乗は極めて急激に増加するため、少し大きな数でもすぐにJavaScriptの