beliebig große Zahlen in C++ ?

  • Hallihallo,
    ich schreibe am Samstag meine Proggen-Klausur in C++.


    Bin grasde beim lernen und arbeite ein Probeklausur durch, nun hab ich folgendes Problem:


    1. Ich soll eine Klasse erstellen, mit der beliebig große natürliche dargestellt werden können, also ganze nicht negative Zahlen. Objekte wie Zahlen 12345678901234567890 oder 12345678901234567891 solen möglich sein.


    Hat jemand eine Idee, wie sowas umzusetzen wäre, keine normale Varialbe scheint einen ausreichend großenm Bereich an Speicher zur Verfügung zu stellen.


    Vielen Dank für eure Hilfe.


    CU:D

  • natürlich wirst du mit notmalen integers nicht weit kommen. Musst halt selbst was bauen.


    Speichermöglichkeiten gibt es viele. Was soll die Klasse denn können (Rechenoperationen)


    denkbar wären z.B. Mehrere ints (Vektor?) dabei wiederum verschiedene Möglichkeiten. entweder Resultat = Summe (schwer und du brauchst sehr viele ints ;)) Oder z.B. erster int Stellen 1-10, zweiter int Stellen 11-20 usw.


    Als externes Format (eingabe/ausgabe) ist ein String (bzw. char*) eine denkbare Lösung.


    natürlich lässt sich damit nicht mehr ohne weiteres mit den Standart-Operatoren rechnen.

  • soll wohl eine Übung sein, bei der du dann auch Operator-Overloading programmieren musst, eines der blödesten Programmier-Aufgaben...


    Also die Aufgabe muss imho mittels einer neu-geschaffenen Klasse lösbar sein. Diese muss dann mehrere Operatoren überschreiben (overloaden), damit =,+,-,*,/ usw. eine neue Bedeutung bekommen, bzw. überhaupt funktionieren mit der Klasse. Intern muss die Klasse die Zahl aufwändig speichern.
    Ich überlege grad ob vielleicht eine Double-Variable eine solch große Zahl nicht von Haus auf schon speichern kann, aber ich denke nicht und du hättest das Problem, dass es wohl sehr ungenau wird, dank Fließkomma-Arithmetik...
    Zerteilen der Zahl und Überlegen der Rechenoperationen wird wohl das Schwierigste.
    Ist eine Aufgabe der Güte nicht sehr schwer?
    Bist du Anfänger in C++? Oder schon Profi?


    Edit: Ok, hätte wohl bedenken müssen, dass die Klausur eh schon vorbei ist, aber vielleicht hilfts doch was, meine Überlegung


  • egal wie groß double ist, beliebig groß können die Werte nicht sein, und genau das wurde hier gefordert.
    Eigentlich ist die Aufgabe gar nicht sooo schwer, vorallem wenn man sich vorher damit beschäftigt hat, (was hier ja wohl der Fall war, da es sich um eine Klausur handelte).



    Wie ist sie gelaufen?

  • Hab eine 2,3 geschrieben, bin zufrieden.


    Die Aufgabe hab ich foogendermaßen gelöst.
    Jede Ziffer in eine eigene Arraystelle eines Char-Arrays geschrieben, dann in int umgewandelt, addiert und nachher ausgeben lassen. Wenn ein ergebnis größer zehn war, zehn abgezogen und bei der vorherigen Stelle einen hinzugezählt, also quasi einen im Sinn.


    Ich hoffe die Erklärung war verständlich.


    CU:D

  • Cool ist auch (wenn man schon rumsaut ;)) das ganze als verkette Liste zu realisieren. Sicher: Die Addition ist dann schon in O(n), aber hey: Scheiss drauf ;)
    (hat dafür den Vorteil, dass wirklich beliebig große Zahlen drin sitzen)

  • Zitat

    Original geschrieben von Khadgar
    (hat dafür den Vorteil, dass wirklich beliebig große Zahlen drin sitzen)


    Bis der Speicher platzt :D

    mfg supersiggi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!