Ich habe gerade mit D begonnen und versuchte, ein einfaches Fakultätsprogramm in D zu schreiben. Gibt es etwas wie Vektoren von C++ in D? Ich wollte Vektoren verwenden, um eine dynamische Funktion zur Berechnung von Fakultät zu erstellen.Fakultät in D Sprache
Antwort
In D sind dynamische Arrays in der Größe veränderbar und können wie Vektoren in C++ verkettet werden. Hier ist ein Beispiel mit einer solchen Anordnung, die aus stdin
liest und schreibt zu stdout
:
import std.stdio; // for readf and writeln
void main() // void for main means "int with return 0 at exit" to OS
{
int n;
readf (" %s", &n); // skip whitespace, then read int in default format
auto f = [1]; // a dynamic array of int containing a 1
foreach (i; 1..n + 1) // for i = 1, 2, 3, ..., n - 1, n
{
f ~= f[$ - 1] * i; // append to f its last element multiplied by i
}
writeln (f); // print the dynamic array in default format
}
Für Eingangs
10
die Ausgabe ist:
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
Wie in den Kommentaren erwähnt, Weitere Informationen zu integrierten dynamischen Arrays finden Sie unter the documentation.
Es ist jedoch nicht klar, was eine dynamische Funktion Sie erwähnen. Und im Allgemeinen brauchen wir kein Array oder Vektor, um faktoriell zu berechnen. Überprüfen Sie RosettaCode für ein paar andere Ansätze zur Berechnung von Fakultät in D.
Perfekter Kandidat für eine Reihe (Generator) ... – DejanLekic
@DejanLekic: Ja, Fakultät ist in der Tat eines der Beispiele für [std.range.recurrence] (https://dlang.org/library/std/range/recurrence .html). Die Frage bezog sich jedoch aus irgendeinem Grund auf Arrays. – Gassa
Warum verwenden Sie nicht std.bigint? - Es ist für Numerik mit beliebiger Genauigkeit optimiert. Selbst mit ulong
(2^64
) können Sie nur faktoriell bis 20 berechnen und für diesen Anwendungsfall könnte eine Inline-Tabelle sinnvoller sein. Hier ist ein Beispiel mit BigInt
:
import std.bigint : BigInt;
BigInt factorial(int n)
{
auto b = BigInt(1);
foreach (i; 1..n + 1)
b *= i;
return b;
}
void main()
{
import std.stdio : writeln;
factorial(10).writeln; // 3628800
factorial(100).writeln; // 9.33 * 10^157
}
Wenn Sie mehr über dynamische Arrays lernen, vielleicht die DLang Tour-Seiten für Arrays oder Slices könnten Ihnen helfen?
- 1. Emacs Unterstützung für D Sprache
- 2. Fakultät - "Arbeitsstruktur"
- 3. Call C++ (C) aus D-Sprache
- 4. Haskell Segmentierung Fehler mit Fakultät
- 5. Hat die Sprache D "proprietäres" Gepäck?
- 6. Scratch online - Rekursiv - Fakultät
- 7. Wie wird Fakultät berechnet?
- 8. Was ist der Unterschied zwischen% d und% * d in der Sprache c?
- 9. Langformatige Verarbeitung bei der Berechnung von Fakultät
- 10. Segmentierungsfehler beim Finden von Fakultät
- 11. Plotten Fakultät von X-Funktion in gnuplot?
- 12. So berechnen Sie Fakultät in Theano
- 13. Rekursion und Fakultät einer Zahl in PHP
- 14. regex Telefon Validator^\ + (\ d +) (- (\ d +) | (\ d +) +) $
- 15. Python: Berechne Fakultät einer nicht-ganzzahligen Zahl
- 16. Schnelle Algorithmen für die Berechnung der Fakultät
- 17. In Java -D wofür steht das D?
- 18. Was ist (\ d +)/(\ d +) in Regex?
- 19. Ist in [\ w \ d] nicht \ d redundant?
- 20. In-Sprache semantische Varianz
- 21. Sprache in einer Sprache zu einer anderen Sprache
- 22. Fehler im selbstgeschriebenen Code für Fakultät einer Zahl in C++
- 23. Wie berechnet man die 21! (21 Fakultät) in swift?
- 24. Syntaxfehler in Sprache Parser Bison
- 25. Kompiliere Timecode-Generierung in D
- 26. Erfahrungen mit D-Programmiersprache
- 27. Frage - formale Sprache in Prolog
- 28. Größe Vorgehen in Prolog Sprache
- 29. Was ist ein Klassenmonitor in D?
- 30. Verteilte Nachricht in D?
Ich habe D lang nicht verwendet, aber haben Sie auf die [Dokumentation] (https://dlang.org/spec/spec.html) verwiesen? Es sagt etwas über dynamische Arays [hier] (https://dlang.org/spec/arrays.html#dynamic-arrays) in der Dokumentation aus. –