首頁 >後端開發 >C++ >如何在沒有外部函式庫的情況下計算並顯示任意大數的階乘?

如何在沒有外部函式庫的情況下計算並顯示任意大數的階乘?

Patricia Arquette
Patricia Arquette原創
2024-11-24 21:00:161024瀏覽

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

全數字顯示的任意大數的階乘計算

簡介:

在最近的一次採訪中,一個具有挑戰性的問題出現:計算任意大數的階乘,同時顯示其所有數字。雖然 GMP 等外部庫提供了方便的解決方案,但必須探索完成此任務的替代方法。在這裡,我們提出了一種利用整數數組來表示階乘的方法,無需依賴外部函式庫。

方法:

  1. 陣列初始化: 建立一個整數數組,每個整數保存一個數字階乘。
  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;
}

解釋:

此程式碼使用階乘的整數位元組表示使用數字的整數組“ 」。函數“factorial”遞歸計算階乘並將其儲存在“arr”中。函數「display」列印「arr」的非零數字,確保階乘的可讀性。

結論:

所提出的方法演示了一種方法無需使用外部庫即可計算任意大數的階乘。它利用基於數組的表示來捕獲階乘的所有數字並充分顯示它們。這種方法不僅滿足了面試要求,還強調了理解程式設計中數位操作的基本原理的重要性。

以上是如何在沒有外部函式庫的情況下計算並顯示任意大數的階乘?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn