Maison > développement back-end > C++ > 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
Libérer: 2024-11-24 13:05:14
original
791 Les gens l'ont consulté

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;
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal