verwenden? Ich möchte eine BigInt-Klasse implementieren, die wirklich große Zahlen verarbeiten kann. Ich möchte nur Zahlen addieren und multiplizieren, aber die Klasse sollte auch negative Zahlen behandeln.Welche Datenstruktur sollte ich für die BigInt-Klasse
Ich wollte die Zahl als eine Zeichenfolge darstellen, aber es gibt einen großen Overhead mit der Konvertierung von Zeichenfolge in int und zurück zum Hinzufügen. Ich möchte hinzufügen, wie auf der High School, fügen Sie entsprechende Reihenfolge hinzu und wenn das Ergebnis größer als 10 ist, fügen Sie den Übertrag zur nächsten Bestellung hinzu.
Dann dachte ich, dass es besser wäre, es als ein Array von unsigned long long int zu behandeln und das Zeichen durch bool getrennt zu halten. Damit habe ich Angst vor der Größe des int, da der C++ - Standard soweit ich weiß nur den Int < float < doppelt garantiert. Korrigiere mich, wenn ich falsch liege. Wenn ich also eine Nummer erreiche, sollte ich das Array nach vorne bewegen und die Nummer zur nächsten Array-Position hinzufügen.
Gibt es eine geeignete oder bessere Datenstruktur?
Klingt wie eine vernünftige Implementierung für mich. Aber wenn Sie ULONGs verwenden, kann jedes Element im Array einen Wert von 0 bis 2^32-1 anstelle von 0 bis 10 enthalten. Das sollte Ihnen ein paar Bytes sparen. :-) –
Der Standard garantiert nur 'float <= double' (beachte das Gleichheitszeichen) – ipc
Ja, genau das meinte ich. Aber ist 2^32 - 1 das gleiche auf Linux und auf Solaris? Ist die Größe überall garantiert? Mein Punkt ist, dass zum Beispiel MyBigIntClass number = "234567434256547"; , und ich fange an, diese Zeichenkettennummer in meine innere Darstellung in der Klasse zu konvertieren, die lange long int (vielleicht :-)) usigned ist, und nachdem die Zahl 2^32 erreicht hat, bewege ich mich an eine andere Position im Array. Ist es richtig? – user1086004