Große Zahlen auf Bildschirm ausgeben
-
Hi, ich hab folgendes Problem:
Angenommen, man will mit sehr große Zahlen arbeiten (128 Bit). Jede Zahl wird als ein Array aus vier int (bzw. aus zwei int64_t) dargestellt.
Wie kann man eine solche Zahl auf dem Bildschirm ausgeben?
Würde man die Elemente des Arrays nacheinander ausgeben, würden diese ja nicht als eine einzige zusammenhängende Zahl interpretiert werden, sondern als vier "selbstständige" Zahlen.
Würde mich über schlaue Ansätze freuen.
-
Auf dem Bildschirm spielt es doch keine Rolle, ob die Zahl zusammengesetzt wurde, oder nicht.
Wenn du die Zahl einfacher rumschieben willst, dann würde sich das umwandeln in einen string ev. lohnen.
-
Kauf dir nen größeren Bildschirm
-
Ok, hier nochmal ein Codebeispiel, dass mein Problem verdeutlicht:
#include <iostream> using namespace std; typedef unsigned long int big_number[2]; int main() { /* Darstellung von 2^32 Binär: 100000000000000000000000000000000 (führende Nullen weggelassen) --> man braucht 33 Bit d.h.: erste Element muss 1 sein, das zweite muss 0 sein, damit die Zahl binär richtig dargestellt wird Die benötigte Ausgabe: 4294967296 Ausgabe wenn man beide Elemente nacheinander ausgibt: 10 Ziel: Ein Algorithmus, der beide Array Elemente als eine Zahl interpretiert und diese als String speichert, um sie auszugeben */ big_number n = {1,0}; cout << n[0] << n[1] << "\n"; return 0; }
-
für zahlen in der größe gibt es unsigned long long http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.80).aspx
btw: warum der typdef?
-
new_user schrieb:
Hi, ich hab folgendes Problem:
Angenommen, man will mit sehr große Zahlen arbeiten (128 Bit). Jede Zahl wird als ein Array aus vier int (bzw. aus zwei int64_t) dargestellt.
Wie kann man eine solche Zahl auf dem Bildschirm ausgeben?
Würde man die Elemente des Arrays nacheinander ausgeben, würden diese ja nicht als eine einzige zusammenhängende Zahl interpretiert werden, sondern als vier "selbstständige" Zahlen.
Würde mich über schlaue Ansätze freuen.im prinzip mußt du
do cout<<'0'+x%10; while(x/=10);machen.
da sehe ich keinen weg, der dran vorbeigeht.
probier das mal mit einem int als x.
allerdings ist so die ausgabe verkehrt herum. naja, das zwischenspeichern nachträgliche umdrehen wirst du hinkriegen. cooler ist das zwischenspeichern in likalen variablen einer rekursiven ausgabefunktion, die harmoniert auch viel toller mit den späteren plänen.
für deinen doppeltgroßen typ ist das dividieren nicht mehr so einfach. wenn du zeit hast, kannste folgendes machen. statt zu dividieren multiplizierst du mit einer geeigneten zahl und shiftest. details in jedem guten assemblerbuch. die multiplikation dann auch noch ala karatsuba machen. außerdem kannst du zum beispiel immer, wenn x>1000000 gleich 6 ziffern auf einmal abspalten und die 6 ziffern entweder selber raustun (allerdings nur mit schnellen kurzzahlen) oder zum beispiel das normale cout<<int benutzen.