Dec(i);
end;
Writeln(F); Writeln(F);
end;
{ Процедура сложения сверхбольших чисел "в столбик".
Результат помещается в первое число, что равносильно оператору сложения
aNum1 := aNum1 + aNum2 }
procedure AddNumbers(var aNum1, aNum2 : TBigNumber);
var i,j : integer;
n1, n2 : integer; { слагаемые цифры }
sum, ovr : integer; { сумма и перенос }
begin
ovr:=0; { в начале переполнение = 0 }
{ цикл по всем цифрам, кроме последней }
for i:=1 to
j:=i; { j используется после завершения цикла }
{ Если в текущей позиции пробел, то считаем его нулем,
а иначе символ цифры преобразуем в цифру 0..9 }
if aNum1[i]=' '
then n1:=0
else n1:=Ord(aNum1[i])-Ord('0'); { n1 = 0..9 }
if aNum2[i]=' '
then n2:=0
else n2:=Ord(aNum2[i])-Ord('0'); { n2 = 0..9 }
sum:= (n1+n2+ovr) mod 10; { сумма sum = 0..9 }
ovr:= (n1+n2+ovr) div 10; { перенос ovr = 0 или 1 }
{ Преобразуем цифру в символ цифры }
aNum1[i]:= Char(sum + Ord('0'));
end;
{ Если было переполнение, то за последней цифрой помещаем единицу }
if ovr<>0 then aNum1[j+1]:='1';
end;
var F : text; i : integer;
begin { === Главная программа === }
Assign(F, ''); Rewrite(F);
FillChar(BN1, SizeOf(BN1), ' '); FillChar(BN2, SizeOf(BN2), ' ');
for i:=1 to CSize-1 do BN1[i]:= Char(Random(100) mod 10 + Ord('0'));
for i:=1 to CSize-1 do BN2[i]:= Char(Random(100) mod 10 + Ord('0'));
WriteBigNumber(F, BN1); { первое слагаемое }
WriteBigNumber(F, BN2); { второе слагаемое }
AddNumbers(BN1, BN2);
WriteBigNumber(F, BN1); { сумма }
Close(F); Readln;
end.