Bei der Berechnung von Faktorien über 20 oder mehr ist der Ergebniswert von Faktorien tendenziell sehr groß. Das faktorielle Ergebnis einer sehr geringen Zahl kann den Bereich der Ganzzahlen im aktuellen PC überschreiten. Wenn Sie beispielsweise ein großes Faktor benötigen, kann über 1000 nicht einfach rekursiv gelöst werden. Im Internet habe ich viele Algorithmen über große Ganzzahl -Faktorien gesehen, die in C, C ++ und C#geschrieben wurden, darunter viele klassische, aber auch viele grobe Artikel. Das Array überschreitet die Grenze und Sie können auf einen Blick sehen, dass das Programm selbst nicht ausführen kann. Schauen Sie sich den Code genauer an. Leider, rau. Es ist das chinesische Neujahr, ich fühle mich zu Hause so müde. Ich habe Java sorgfältig analysiert und verwendet, um ein Programm zu implementieren, um die Super-Large-Ganzzahl-Fakultät zu berechnen. Die Idee wird aus dem Internet genommen und von mir persönlich optimiert und verbessert.
Diese Methode verwendet den Algorithmus "Array Carry". Wenn der Wertebereich der Computervariablen überschritten wird, wird die multi-Digit-Multiplikation in einstellige Multiplikation umgewandelt. Wie 11! = 39916800. Wenn Sie ein Fakultät von 12 benötigen, müssen Sie 39916800 und 12 multiplizieren und die Multiplikationszuweisungsrate verwenden. Die vertikale Multiplikationsformel ist in der folgenden Abbildung dargestellt:
Verwenden Sie ein Array, um das Ergebnis jedes Bits des Faktors und ein Array-Element zu speichern, um die einstellige Nummer zu speichern. Zum Beispiel: 399 des faktoriellen Ergebnisses von 11
16800 wird auf die 8 Elemente des Arrays gespeichert. Um das Faktor von 12 zu berechnen, multiplizieren Sie den Wert in jedem Array -Element mit 12 und speichern Sie das Ergebnis im ursprünglichen Array -Element. Als nächstes bestimmen wir, ob jedes Array -Element tragen muss. Durch Tragvorgänge ist die von jedem Element im Array gespeicherte Zahl nur einstellig. Das schematische Diagramm lautet wie folgt:
Theoretisch kann das faktorielle Ergebnis, solange der Computerspeicherraum zulässt, das faktorielle Ergebnis gespeichert und nicht mehr durch den Variablenbereich eingeschränkt, sondern nur durch die Adressierbarkeit des Betriebssystems und des Computerspeichers eingeschränkt. Freundliche Tipps: Wenn die erforderliche faktorielle Nummer groß ist, können Sie das Array als langen Typ definieren, um Überlauf bei der Berechnung des Produkts der Einheitsnummer zu vermeiden.
Der Implementierungscode lautet wie folgt:
public class bigInteger {/*** carry carry* @param bitarray* @param pos verwendet <= 9) // kein Tragen, wenn weniger als 9 {carray = 0;} else if (bit [i]> 9 && i <pos) // größer als 9, aber nicht das höchste Bit {carray = bit [i]/10; // Save Carry Value Bit [i] = Bit [i]%10; // Die einzelne Ziffer dieses Bits}}}. Bit {while (bit [i]> 9) // Loop Forward Bit {carray = bit [i]/10; // Carry Value Bit [i] = Bit [i] % 10; // Die aktuelle erste Ziffer i ++; Bit [i] = carray; // Carry Value im nächsten Bit}}}}}}}}} kalkulat. void bigFactorial (int bigInteger) {int pos = 0; // int digit; // Datenlänge int a, b; int m = 0; // Statistikausgabe -Ziffern int n = 0; // Statistiken Ausgabe Zeilen doppelte Summe = 0; // Factory -Ziffern für (a = 1; a <= bigintier; (int) sum+ 1; // datenlänge int [] fact = new int [digit]; // initialisieren Sie ein Array-Tatsache [0] = 1; // Angenommen, die einzelne Ziffer ist 1FOR (a = 2; a <= biginTeger; a ++) // multiply 2^biginteger mit dem Originalprodukt eins eins nach eins (b = digit-1; b> b> = 0; Tatsache [b]! = 0) {pos = b; // zeichnen Sie den höchsten Bit-Break auf; break;}} System.out.println (BigInteger+"Factory -Ergebnis ist:"); für (a = pos; a> = 0; a -) // Ausgabeberechnungsergebnis {System.out.print (Fakt [a]); ; n ++; if (10 == n) {System.out.print ("/n"); n = 0;}}} System.out.println ("/n"+"Faktorien haben:"+(pos+1)+"bit"); this.bigfactorial (bigInteger); int timefinishi = (int) system.currenttimemillis (); int time = timeFinishi-TimeBegin; System.out.println ("Berechnungszeit:" + Zeit + "msc"); BigInteger (); bi.dobigfactorial (100000);}}Berechnen Sie das Faktor für 10.000 und zeigen Sie Folgendes an:
Infolgedessen kann die Konsole den Inhalt offensichtlich nicht speichern. Es gibt 450.000 Faktorien von 100.000, was einem Roman mit 450.000 Wörtern entspricht. Die faktoriellen Ergebnisse von 1000 sind wie folgt:
Die Konsole kann vollständig angezeigt werden.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die detaillierte Erläuterung der Java -Version des Super Lavy Integer Faktorial Algorithmus Code - Level 10.000. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
" Analyse des Betriebskodex des Power Index in Java "
" Beispiel für den Ausschluss oder den Betrieb von Hexadezimal -Zeichenfolgen" Java -Programmiercode "
" Java-Programmierung implementieren benutzerbasierte kollaborative Filterung Empfohlener Algorithmus-Code-Beispiel "
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!