ホームページ > バックエンド開発 > C++ > 外部ライブラリを使わずに任意に大きな数の階乗を計算するにはどうすればよいでしょうか?

外部ライブラリを使わずに任意に大きな数の階乗を計算するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-11-24 13:05:14
オリジナル
768 人が閲覧しました

How Can We Calculate the Factorial of Arbitrarily Large Numbers Without External Libraries?

大きな数の階乗の決定

階乗の計算は、結果がネイティブ データ型の制限を超える場合に問題が発生します。この記事では、任意の大きな整数の階乗を計算し、解内のすべての桁を明らかにする手法を紹介します。

手動計算のシミュレーション

GMP などの外部ライブラリがない場合、整数の配列を使用した手動階乗計算のプロセスを模倣する必要があります。この配列は大きな数値を表し、各インデックスは 1 桁を保持します。

階乗計算アルゴリズム

数値 n の場合、階乗は次のように計算されます。

  1. 配列内の各桁を乗算します。 n.
  2. 適切なキャリー処理を使用して、結果を同じ配列に格納します。
  3. 1 または 0 に達するまで、アルゴリズムを n-1 で再帰的に呼び出します。

実装例

提供された C コードは上記を実装しますアルゴリズム:

#include <iostream>
#include <cstring>

int max = 5000;

void display(int arr[]) {
  int ctr = 0;
  for (int i = 0; i < max; i++) {
    if (!ctr && arr[i]) ctr = 1;
    if (ctr) std::cout << arr[i];
  }
}

void factorial(int arr[], int n) {
  if (!n) return;
  int carry = 0;
  for (int i = max - 1; i >= 0; --i) {
    arr[i] = (arr[i] * n) + carry;
    carry = arr[i] / 10;
    arr[i] %= 10;
  }
  factorial(arr, n - 1);
}

int main() {
  int *arr = new int[max];
  std::memset(arr, 0, max * sizeof(int));
  arr[max - 1] = 1;
  int num;
  std::cout << "Enter the number: ";
  std::cin >> num;
  std::cout << "Factorial of " << num << " is :\n";
  factorial(arr, num);
  display(arr);
  delete[] arr;
  return 0;
}
ログイン後にコピー

以上が外部ライブラリを使わずに任意に大きな数の階乗を計算するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート