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

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

Susan Sarandon
發布: 2024-11-24 13:05:14
原創
706 人瀏覽過

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

決定大數的階乘

當結果超出本機資料型態的限制時,階乘的計算會帶來挑戰。本文介紹了一種計算任意大整數的階乘的技術,揭示解中的所有數字。

模擬手動計算

在沒有 GMP 等外部函式庫的情況下,我們必須使用整數陣列來模擬手動階乘計算的過程。此數組代表大數,每個索引保存一個數字。

階乘計算演算法

對於數字 n,階乘計算如下:

  1. 將陣列中的每個數字乘以 n。
  2. 儲存結果在同一個陣列中,並進行適當的進位處理。
  3. 以 n-1 遞歸呼叫演算法,直到達到 1 或 0。

範例實作

提供的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板