


Wie können wir die Fakultät beliebig großer Zahlen ohne externe Bibliotheken berechnen und anzeigen?
Nov 24, 2024 pm 09:00 PMFakultätsberechnung beliebig großer Zahlen mit vollständiger Ziffernanzeige
Einführung:
In einem aktuellen Interview eine herausfordernde Frage entstand: die Berechnung der Fakultät einer beliebig großen Zahl bei gleichzeitiger Anzeige aller ihrer Ziffern. Während externe Bibliotheken wie GMP praktische Lösungen bieten, ist es wichtig, alternative Methoden für diese Aufgabe zu erkunden. Hier stellen wir einen Ansatz vor, der ein Array von Ganzzahlen verwendet, um die Fakultät darzustellen, ohne auf externe Bibliotheken angewiesen zu sein.
Methode:
- Array-Initialisierung : Erstellen Sie ein Array von Ganzzahlen, von denen jede eine einzelne Ziffer enthält Fakultät.
- Fakultätsberechnung: Iterieren Sie über die Elemente des Arrays von rechts nach links und multiplizieren Sie jede Ziffer mit der angegebenen Zahl. Übertragen Sie jeden Überlauf auf die nächste Ziffer.
- Rekursion: Wiederholen Sie Schritt 2 rekursiv für jede nachfolgende Ganzzahl der Fakultät und dekrementieren Sie dabei die eingegebene Zahl in jedem Schritt.
- Anzeige: Sobald die Fakultät berechnet wurde, iterieren Sie über das Array von links nach rechts und geben Sie jedes Nicht-Null-Element aus (ignorieren). Führende Nullen).
Implementierung:
#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; }
Erklärung:
Dieser Code verwendet ein Integer-Array 'arr' zur Darstellung der Fakultät. Die Funktion „factorial“ berechnet rekursiv die Fakultät und speichert sie in „arr“. Die Funktion „display“ gibt die Nicht-Null-Ziffern von „arr“ aus und stellt so die Lesbarkeit der Fakultät sicher.
Fazit:
Der vorgestellte Ansatz demonstriert eine Methode für Berechnen der Fakultät beliebig großer Zahlen ohne Verwendung externer Bibliotheken. Es verwendet eine Array-basierte Darstellung, um alle Ziffern der Fakultät zu erfassen und sie in ihrer vollen Pracht anzuzeigen. Diese Methode erfüllt nicht nur die Interviewanforderungen, sondern unterstreicht auch, wie wichtig es ist, die zugrunde liegenden Prinzipien der Zahlenmanipulation in der Programmierung zu verstehen.
Das obige ist der detaillierte Inhalt vonWie können wir die Fakultät beliebig großer Zahlen ohne externe Bibliotheken berechnen und anzeigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
