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

【JavaScript】BigIntを使って巨大な階乗を計算する方法

問題の概要

任意の数値を1つだけ引数として受け取り、その階乗を計算するJavaScript関数を作成する必要があります。ここで扱うのは、通常のletvarで宣言したnumber型の変数では正確に保持しきれないような大きな数の階乗です。そこで活躍するのが、JavaScriptに新しく導入されたBigInt型です。最終的に、計算した階乗の値を文字列に変換して返却します。

例えば、入力が次の場合:

const num = 45;

出力は以下のようになります:

'119622220865480194561963161495657715064383733760000000000'

実装コード

const num = 45;
const longFactorial = (num) => {
    var bigInt = BigInt(num);
    var factorial = 1n;
    for (let i = 0n; i < bigInt ; i++) {
        factorial *= bigInt - i;
    }
    return String(factorial);
}
console.log(longFactorial(45));

実行結果

コンソールには以下のように出力されます:

119622220865480194561963161495657715064383733760000000000

ポイント解説

  • BigIntとは: ES2020で正式導入されたプリミティブ型で、Number型で正確に扱える上限(2^53 − 1 ≒ 約9千兆)を超える整数も誤差なく表現できます。
  • リテラルの書き方: 数値の末尾に「n」を付けることでBigIntリテラルになります(例:1n)。また、BigInt()コンストラクタを使ってNumberから変換することも可能です。
  • 型の混在に注意: BigIntとNumberは直接混在した演算ができません。そのため、ループカウンタも0nのようにBigIntで統一しています。
  • 戻り値について: 結果はString()で文字列化して返すことで、呼び出し側でも安全かつ確実に扱えます。
  1. JavaScriptのクロージャでプライバシー(変数の隠蔽)を実現する方法

    はじめに:クロージャとは何かJavaScriptにはクラスベース言語のような「private」修飾子が存在しないため、変数を外部から直接アクセスできないようにしたい場合、クロージャ(Closure)を活用するのが定番のテクニックです。クロージャとは、「関数が定義されたときのスコープ(外側の変数)への参照を保持し続ける仕組み」のことです。この性質を利用すると、関数の内部に閉じ込めた変数は外部から直接参照・書き換えできなくなり、いわばプライベートな状態として扱うことができます。以下に、クロージャを使ってプライバシー(変数の隠蔽)を実現するサンプルコードを示します。サンプルコード<!DOCTY

  2. JavaScriptのBigIntとは?使い方をサンプルコード付きで解説

    BigIntは、253 − 1 より大きい整数値を表現するために用意された組み込みオブジェクトです。 通常のNumber型で安全に扱える整数の上限は「Number.MAX_SAFE_INTEGER」(9007199254740991 = 253 − 1)までです。これを超える数値をNumber型で扱うと、計算誤差や精度の低下が発生してしまいます。そこで活躍するのがBigIntです。数値リテラルの末尾に「n」を付けるか、BigInt()関数を使用することで、どれほど巨大な整数でも正確に表現・演算できます。 以下は、JavaScriptでBigIntを使用する具体的なサンプルコードです。 サンプル