Implementieren einer BigInt-Klasse in C
In C ist es beim Umgang mit Zahlen, die größer als ein Long-Int sind, nützlich, eine benutzerdefinierte „ big int"-Klasse. Anstatt sich auf externe Implementierungen zu verlassen, sollten Sie Ihre eigene erstellen, um ein tieferes Verständnis dieser Konzepte zu erlangen.
Datenstruktur
Ein einfacher Ansatz besteht darin, die Zahl als Zeichenfolge zu speichern , zerlegen Sie es in kleinere Zahlen (z. B. Ziffern) und platzieren Sie sie in einem Array. Dies vereinfacht Vergleichsoperationen, wirft jedoch Bedenken hinsichtlich Operationen wie Addition und Multiplikation auf.
Algorithmusübersicht
Bei diesen Operationen ist es von Vorteil, die binäre Natur von ganzen Zahlen zu berücksichtigen. Implementieren Sie als Beispiel den Additionsoperator ( =), durchlaufen Sie jedes Ziffernpaar und addieren Sie es. Wenn das Ergebnis den BaseType überschreitet, übertragen Sie den Überschuss in die nächste Ziffer.
Codebeispiel
template< class BaseType > BigInt< BaseType >& BigInt< BaseType >::operator += (BigInt< BaseType > const& operand) { BT count, carry = 0; for (count = 0; count < std::max(value_.size(), operand.value_.size(); count++) { BT op0 = count < value_.size() ? value_.at(count) : 0, op1 = count < operand.value_.size() ? operand.value_.at(count) : 0; BT digits_result = op0 + op1 + carry; if (digits_result-carry < std::max(op0, op1) { BT carry_old = carry; carry = digits_result; digits_result = (op0 + op1 + carry) >> sizeof(BT)*8; // NOTE [1] } else carry = 0; } return *this; }
Implementierungshinweise
Andere Operatoren
Wiederholen Sie dies algorithmischer Ansatz für Subtraktion, Multiplikation und Division. Implementieren Sie Standardoperatoren wie << für Ausgabe und < zum Vergleich.
Fazit
Das Erstellen einer benutzerdefinierten BigInt-Klasse ist eine herausfordernde, aber lohnende Übung. Das Befolgen der hier beschriebenen Schritte kann Ihnen dabei helfen, eine funktionale und effiziente Klasse zu implementieren, die beliebig große Ganzzahlen in C verarbeitet.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine BigInt-Klasse in C für die Verarbeitung beliebig großer Ganzzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!