Klasse für beliebig Grosse Zahlen



  • mr.delete schrieb:

    mit bool? wie soll das gehen?

    binär?



  • eine binäre implementierung erhöht die komplexität der operationen aber stark.
    speed ist unwesentlich
    ich verstehe die variable vom typ Char einfach nicht, wann ich eine zahl und wann ein zeichen habe



  • Also vector<bool/char> ist ne ganz schlechte Idee dafür. Ich würde mit ganzen DWORDs arbeiten. Aber wieso das Rad neu erfinden? Es gibt doch schon etliche solcher Klassen. Zur Übung OK, aber wenn du die irgendwann mal ernsthaft einsetzen willst, dann hast du Zeit zuviel.



  • ich werde die nie im leben einsetzen die kriegt mein info assisten zur korrektur..
    ist nur ne übung



  • Der Typ "char" beschreibt eine Speicherzelle mit der Groesse von mindestens 8 Bit.

    Auf einem Computer gibt es nur Zahlen, so dass der 8 Bit-Wert den Wertebereich 2 hoch 8, also 0..255 (vorzeichenlos) oder -128..+127 (vorzeichenbehaftet) beinhaltet.

    Schriftzeichen werden im Speicher abgebildet, in dem man von einer Zeichentabelle ausgeht, die den Zeichen eine Nummer zuordnet. 'A' z.B. ist Nr. 65 im ASCII-Zeichensatz, und daraus abgeleiteten Zeichensaetzen.

    Schreibt man also,

    char c = 'A';
    

    Enthaelt 'c' danach in der Regel den Wert 65.

    Ziffern liegen im ASCII-Zeichensatz von 48 .. 57. Um eine Ziffer in einen Zahlenwert umzuwandeln, muss man, wie Du schon gesagt hast, '0' (also 48) abziehen.

    int ziffer = zeichen - '0';
    

    Fuer die Implementierung der Berechnungen sollte man sich u.U. verschiedene Mikroprozessorarchitekturen o.Ae. zu Gemuete fuehren, um zu sehen, welche Loesungen es fuer die Addition/Subtraktion von Zahlen gibt.

    Am einfachsten ist es wohl, bei der Addition zweier Zahlen, zunaechst beide vom Anfang her mit Null-Bytes aufzufuellen, so dass sie die gleiche Laenge haben. Dann vom Ende her die Bytes stueckweise summieren, den Uebertrag merken und jeweils auf die naechsten Bytes mitaufaddieren.

    Uebrigens kann man statt einem char-Vektor auch gleich die String-Klasse nehmen, die kann auch nicht-druckbare Zeichen abspeichern (also irgendwelche Bytes). Zugriff und Speicherverbrauch duerften bei der String-Klasse auch besser sein.

    Hoffe, das hilft.



  • Walli schrieb:

    Also vector<bool/char> ist ne ganz schlechte Idee dafür. Ich würde mit ganzen DWORDs arbeiten. Aber wieso das Rad neu erfinden? Es gibt doch schon etliche solcher Klassen. Zur Übung OK, aber wenn du die irgendwann mal ernsthaft einsetzen willst, dann hast du Zeit zuviel.

    Wieso DWORD? Ich würd am liebsten bits nehmen, vielleicht mit bitset. Weil ich bitset aber nicht so schön finde, nehm ich halt vector<bool>. Wenn man so kleine Einheiten nimmt, kann man alle Vielfachen von 8 (bool) als Bitzahl nehmen.



  • Michael E. schrieb:

    Wenn man so kleine Einheiten nimmt, kann man alle Vielfachen von 8 (bool) als Bitzahl nehmen.

    Und es ist scheißlangsam! 😉



  • Hm, warum schaust Du Dir nicht mal libgmp an?



  • Walli schrieb:

    Michael E. schrieb:

    Wenn man so kleine Einheiten nimmt, kann man alle Vielfachen von 8 (bool) als Bitzahl nehmen.

    Und es ist scheißlangsam! 😉

    Erklärung?



  • Wieso? Weil binäres herumverknüpfen viel langsamer ist, als wenn man den Prozessor diese Arbeit machen lässt.


Anmelden zum Antworten