Hallo ginimausi,
für Integerzahlen könnte das Ganze auch so aussehen:
Delphi-Quellcode:
program langzahl;
Const
MaxZahlenLaenge = 200; // Das soll für's Erste genug sein :-)
Var
sZahl1 : String; // unsere 1. Zahl als Zeichenfolge
sZahl2 : String; // unsere 1. Zahl als Zeichenfolge
sZahl3 : String; // das wird die Summe
i : Integer; // ein Zähler für die Schleife
iZahl1 : Integer; // eine Ziffer aus Zahl 1
iZahl2 : Integer; // eine Ziffer aus Zahl 2
iZahl3 : Integer; // iZahl1 + iZahl2
iZahlUeberlauf : Integer; // 1, wenn iZahl3 >= 10, sonst 0
begin
sZahl1 := '123456987456312125447899511212332114565'; // eine Zahl
sZahl2 := '987987987987545462311323216545564987454665445654654654'; // und noch eine Zahl
sZahl3 := ''; // noch nix
// alles links mit 0 auf die maximale Länge auffüllen
while Length(sZahl1) < MaxZahlenLaenge do sZahl1 := '0' + sZahl1;
while Length(sZahl2) < MaxZahlenLaenge do sZahl2 := '0' + sZahl2;
while Length(sZahl3) < MaxZahlenLaenge do sZahl3 := '0' + sZahl3;
// da ist noch nix drin, wir fangen ja gerade erst an
iZahlUeberlauf := 0;
// wir arbeiten von rechts nach links
for i := MaxZahlenLaenge DownTo 1 Do begin
iZahl1 := StrToInt(sZahl1[i]); // eine Ziffer holen
iZahl2 := StrToInt(sZahl2[i]); // noch eine Ziffer holen
// die beiden Ziffern addieren und den Überlauf der vorherigen Addition dazurechnen.
iZahl3 := iZahl1 + iZahl2 + iZahlUeberlauf;
// ist das Ergebnis >= 10, so haben wir einen Überlauf.
if iZahl3 >= 10 then begin
iZahlUeberlauf := 1; // weil Überlauf
// 10 abziehen, damit wir nur die letzte Ziffer bekommen.
iZahl3 := iZahl3 - 10;
// die Ziffer in die Ergebniszahl übernehmen.
sZahl3[i] := IntToStr(iZahl3)[1];
end else begin
iZahlUeberlauf := 0; // kein überlauf
// die Ziffer in die Ergebniszahl übernehmen.
sZahl3[i] := IntToStr(iZahl3)[1];
end;
end;
// Ergebnis ausgeben.
WriteLn(' Zahl1: ' + sZahl1);
WriteLn('+ Zahl2: ' + sZahl2);
WriteLn(' Summe: ' + sZahl3);
end.
Bei Dezimalzahlen müsste man auf die gleiche Zahl von Vorkommastellen und die gleiche Zahl Nachkommastellen auffüllen, könnte dann aber genauso von rechts nach links über die String laufen und müsste nur beim Komma einen kleinen "Hüpfer" machen.