Maison  >  Article  >  développement back-end  >  Comment pouvons-nous calculer la factorielle de nombres arbitrairement grands sans bibliothèques externes ?

Comment pouvons-nous calculer la factorielle de nombres arbitrairement grands sans bibliothèques externes ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 13:05:14684parcourir

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

Détermination de la factorielle des grands nombres

Le calcul des factorielles pose un défi lorsque les résultats dépassent les limites des types de données natifs. Cet article présente une technique de calcul de factorielles d'entiers arbitrairement grands, révélant tous les chiffres de la solution.

Simulation du calcul manuel

En l'absence de bibliothèques externes comme GMP , nous devons imiter le processus de calcul factoriel manuel en utilisant un tableau d'entiers. Ce tableau représente le grand nombre, chaque index contenant un chiffre.

Algorithme de calcul factoriel

Pour un nombre n, la factorielle est calculée comme suit :

  1. Multipliez chaque chiffre du tableau par n.
  2. Stockez le résultat dans le même tableau, avec le bon carry handle.
  3. Appelez l'algorithme de manière récursive avec n-1 jusqu'à atteindre 1 ou 0.

Exemple d'implémentation

Le code C fourni implémente l'algorithme ci-dessus :

#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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn