![]() |
Exakte Addition langer Zahlen
Hallo ihr da draussen!
Ich habe folgendes Problem. Im Rahmen einer Projektarbeit is es meibne Aufgabe, ein Programm in Delphi zu schreiben, welches zwei natürliche Zahlen die man eingibt adddiert. So weit so einfach, das schwierige dabei ist, dass beide Zahlen eine Länge von 200 Stellen haben dürfen. Der Rechner soll die exakte (addierte) Zahl dann ausgeben.
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var x, y,z: real; begin x:=StrToFloat(Edit1.text); y:=StrToFloat(Edit2.Text); z:=x+y; Listbox1.Items.Add(FloatToStr(z)); end; Soweit hab ich das Programm jetzt, es läuft auch bloß ab (10) Stellen addiert es die Zahlen nicht mehr genau, es kommt eine Zahl 1,55457847E22 oder so heraus (als Beispiel) Meine Frage ist deshalb: Wie schreibe ich das Programm das die Zahlen 200 Stellen haben können? Und dann der exakte Wert ausgegeben wird? Vielen Dank im Voraus für eure Hilfe ;-) [edit=mkinzler]Tag gefixt Mfg, mkinzler[/edit] |
Re: Exakte Addition langer Zahlen
Du brauchst einen Implementierung für große Zahlen. Such mal nach BigInt (z.B. aus DEC)
|
Re: Exakte Addition langer Zahlen
mkinzler:
Ich dachte mir, das Ziel sei, es selbst zu machen ? :gruebel: Ein (sehr blöder) Ansatz meinerseits wäre die Strings manuell aufzuaddieren :P MfG |
Re: Exakte Addition langer Zahlen
So blöd ist die Idee von mr_emre_d doch gar nicht:
die beiden Zahlen "von Hand", also Stelle für Stelle von hinten addieren, den resultierenden "Einer" wegschreiben und mit dem "Überlauf" und der nächsten Stelle links fortfahren, bis Deine Ausgangszahlen keine Stellen mehr übrig haben. Selbst wenn es Datentypen gibt, der 200-stellige Ganzzahlen enthält, könnte der Aufgabensteller (Lehrer??) auf die Idee kommen, 500-stellige Zahlen haben zu wollen..... |
Re: Exakte Addition langer Zahlen
Würde es theoretisch so gehen(mit dem addieren per Hand),
dass ich die Zahlen in ein Array schreibe? also jede Stelle der Zahl kommt in ein einzelnes Array-Teilfach? |
Re: Exakte Addition langer Zahlen
Kann man machen, aber Zeichenketten reichen eigentlich, da ja auch im String einzelne Zeichen mit einem Index angesprochen werden. Kleiner Tipp, um sich das Leben etwas leichter zu machen: Erstmal beide Zahlen auf die gleiche Länge bringen (vorangestellte "0"), dann spart man sich jede Menge Sonderfälle ...
|
Re: Exakte Addition langer Zahlen
OK. Ich habe "meine Idee" ausprogrammiert und muss sagen, es funzt super :)
Gini: Versuchs mal, so zu machen, wie ich vorgeschlagen habe. MfG |
Re: Exakte Addition langer Zahlen
Du kannst auf die Ziffern bereits Array-mäßig zugreifen ;)=
Also ungefähr so:
Delphi-Quellcode:
Edit: Diverse Verbesssungen :oops:
zahl1 := Edit1.Text;
zahl2 := Edit2.Text; while (zahl1.length < zahl2.length) zahl1 := '0' + zahl1; while (zahl2.length < zahl1.length) zahl2 := '0' + zahl2; setlength(Result, zahl1.length); temp := 0; carry := 0; for i := zahl1.length downto 1 do begin temp := strtoint(zahl1[i]) + strtoint(zahl2[i]) + carry; Result[i] := temp mod 10; carry := temp div 10; end; if carry > 0 then Result := inttostr(carry) + Result; |
Re: Exakte Addition langer Zahlen
Ich versteh nicht so ganz was "manuell aufaddieren "
heist?^^ Wenn ich weiß was es heißt werde ich das ausprobieren =) Sry, bin blond;-) |
Re: Exakte Addition langer Zahlen
...ohne es auszuprobieren: könnte RESULT nicht eine Stelle mehr enthalten? Überlauf?
SORRY! hatte nicht richtig gelesen: da steht ja schon " + 1"!!!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz