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

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

Patricia Arquette
リリース: 2024-11-24 21:00:16
オリジナル
1090 人が閲覧しました

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

全桁表示による任意の大きな数値の階乗計算

はじめに:

最近のインタビューで、挑戦的な質問がありました。 arose: 任意の大きな数値の階乗を計算しながら、そのすべての桁を同時に表示します。 GMP のような外部ライブラリは便利なソリューションを提供しますが、このタスクの代替方法を検討することが不可欠です。ここでは、外部ライブラリに依存せずに整数の配列を利用して階乗を表すアプローチを紹介します。

メソッド:

  1. 配列の初期化: それぞれが 1 桁の整数を保持する整数の配列を作成します。 Factorial.
  2. 階乗計算: 配列の要素を右から左に繰り返し、各桁に指定された数値を乗算します。オーバーフローを次の桁に繰り上げます。
  3. 再帰: 階乗の後続の整数ごとにステップ 2 を再帰的に繰り返し、各ステップで入力数値をデクリメントします。
  4. 表示: 階乗が計算されたら、配列を左から右に繰り返し、それぞれを出力します。ゼロ以外の要素 (先頭のゼロを無視します)。

実装:

#include <iostream>
#include <cstring>

int max = 5000;

// Display all non-zero digits of the array
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];
    }
}

// Calculate the factorial of 'n' and store it in 'arr'
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;
}
ログイン後にコピー

説明:

このコードは、階乗を表すために整数配列 'arr' を使用します。関数「factorial」は階乗を再帰的に計算し、それを「arr」に保存します。関数 'display' は 'arr' のゼロ以外の数字を出力し、階乗の読みやすさを保証します。

結論:

提示されたアプローチは、外部ライブラリを使用せずに任意の大きな数の階乗を計算します。配列ベースの表現を利用して階乗のすべての桁を取得し、それらを完全に表示します。この方法は、インタビューの要件を満たすだけでなく、プログラミングにおける数値操作の基礎となる原則を理解することの重要性を強調します。

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

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