program PascalGuru;
{ сложение + вычитание БОЛЬШИХ чисел в формате STRING }
Function CompLong(s1, s2: string): integer;
{ функция CompLong сравнивает две строки как большие числа }
var
a, len1, len2, i: integer;
b: boolean;
begin
a := 0;
b := true;
len1 := length(s1);
len2 := length(s2);
if len1 > len2 then
begin
a := 1;
b := false;
end;
if len1 < len2 then
begin
a := -1;
b := false;
end;
if b then
for i := 1 to len1 do
begin
if Ord(s1[i]) - 48 > Ord(s2[i]) - 48 then
begin
a := 1;
break;
end;
if s1[i] < s2[i] then
begin
a := -1;
break;
end;
end;
CompLong := a;
end;
{ --- функция вычитания --- }
function minus(s1, s2: string): string;
var
i, len, c, x: integer;
a, b: array [1 .. 1000] of integer;
rez: string;
begin
c := 0;
len := length(s2);
for i := 1 to len do
b[len - i + 1] := Ord(s2[i]) - 48;
len := length(s1);
for i := 1 to len do
a[len - i + 1] := Ord(s1[i]) - 48;
if CompLong(s1, s2) < 0 then
begin
Write('-');
len := length(s2);
for i := 1 to len do
begin
x := a[i];
a[i] := b[i];
b[i] := x;
end;
end;
for i := 1 to len do
begin
c := c + a[i] - b[i] + 10;
a[i] := c mod 10; { результат будет храниться в массиве a }
if c < 10 then
c := -1
else
c := 0;
end;
while (a[len] = 0) and (len > 1) do
len := len - 1;
rez := '';
for i := len downto 1 do
begin
str(a[i], s1);
rez := rez + s1;
end;
minus := rez;
end;
{ --- конец функции вычитания --- }
{ функция сложения }
function plus(s1, s2: string): string;
var
a, b: array [1 .. 100] of integer;
len, i, c: integer;
rez: string;
begin
c := 0;
len := length(s1); { разбиение строк в елементы массивов }
for i := 1 to len do
a[len - i + 1] := Ord(s1[i]) - 48;
len := length(s2);
for i := 1 to len do
b[len - i + 1] := Ord(s2[i]) - 48;
if length(s1) > length(s2) then
len := length(s1)
else
len := length(s2);
for i := 1 to len do
begin
c := c + a[i] + b[i];
{ переменная c будет в дальнейшем использоваться для переноса числа в следующия ряд }
a[i] := c mod 10; { результат сложения запишем в массив а }
c := c div 10;
end;
if c > 0 then
begin
len := len + 1;
a[len] := c;
end;
rez := '';
for i := len downto 1 do
begin
str(a[i], s1);
rez := rez + s1;
end;
plus := rez;
end;
{ --- конец функции сложения --- }
var
c1, c2: string;
znak: char;
begin
writeln(plus('154527452243563888500', '100000020'));
writeln(minus('526', '126'));
end.