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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-24 21:00:161021parcourir

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

Calcul factoriel de nombres arbitrairement grands avec affichage complet des chiffres

Introduction :

Dans une récente interview, une question difficile est né : calculer la factorielle d’un nombre arbitrairement grand tout en affichant simultanément tous ses chiffres. Bien que les bibliothèques externes comme GMP offrent des solutions pratiques, il est essentiel d'explorer des méthodes alternatives pour cette tâche. Ici, nous présentons une approche qui utilise un tableau d'entiers pour représenter la factorielle sans recourir à des bibliothèques externes.

Méthode :

  1. Initialisation du tableau : Créez un tableau d'entiers, chacun contenant un seul chiffre du factoriel.
  2. Calcul factoriel : Parcourez les éléments du tableau de droite à gauche, en multipliant chaque chiffre par le nombre donné. Reportez tout débordement au chiffre suivant.
  3. Récursion : Répétez l'étape 2 de manière récursive pour chaque entier suivant de la factorielle, en décrémentant le nombre saisi à chaque étape.
  4. Affichage : Une fois la factorielle calculée, parcourez le tableau de gauche à droite, en imprimant chaque élément non nul (en ignorant les zéros non significatifs).

Mise en œuvre :

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

Explication :

Ce code utilise un tableau d'entiers 'arr' pour représenter la factorielle. La fonction « factorielle » calcule récursivement la factorielle et la stocke dans « arr ». La fonction 'display' imprime les chiffres non nuls de 'arr', assurant la lisibilité de la factorielle.

Conclusion :

L'approche présentée démontre une méthode pour calculer la factorielle de nombres arbitrairement grands sans utiliser de bibliothèques externes. Il utilise une représentation basée sur un tableau pour capturer tous les chiffres de la factorielle et les afficher dans toute leur splendeur. Cette méthode répond non seulement aux exigences de l'entretien, mais souligne également l'importance de comprendre les principes sous-jacents de la manipulation des nombres en programmation.

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