Длин-е числа м-о хранить в строке, в массиве, в файле (недостаток: медленное время доступа),с помощью динамических структур данных (списки). Для простоты рассуждений реализуем только неотрицательные целые числа. Вводим дл.число с помощью строки и преобразуем его. Младшие размеры дл.числа – это эл-ты массива с меньшими номерами. {Dlch=array[1..Nmax] of digit;}
Сложение:
Procedure sum(a,b:dlch;var c:dlch);
var i, p, k, ma: int.;
Begin
p:=; obnul(c);
if dlina(a)> dlina(b) then ma:= dlina(a)
else ma:=dlina(b);
for i:=1 to ma+1 do
begin
k:=a[i]+b[i]+p;
if k>9 then
begin
k:=k-10;
p:=1;
end
else p:=0;
c[i]:=k;
end;
end;
Вычитание:
Procedure subtr(a,b:dlch; var c:dlch);
var i, p, k:int.;
Begin
p:=0;
obnul(c);
for i:=1 to dlina(a) do
begin
k:=a[i]-b[i]-p;
if k<0 then begin
k:=k+10;
p:=1;
end
else p:=0;
c[i]:=k;
end;
end;
Умножения:
Procedure umn (var a,b,c:dlch);
var per:0..9; i, j:word; p:0..99;
Begin
obnul (c);
m:=strazryad(b);
for i:=0 to n do
begin
per:=0;
for j:=0 to m do
begin
p:=a[j]*b[i]+per+[i+j];
c[i+j]:=p mod 10;
per:=p div 10;
end;
c[i+m+1]:=per;
end;
end;
Отношения:
Function bolshe(var a,b:dlch):boolean;
var i:word;
Begin
i:=Nmax-1;
while (a[i]=b[i]) and (i>0) do i:=i-1;
bolshe:=a[i]>b[i];
end; {true если a>b, false если a<=b}
{Procedure obnul(var a:dlch);
var i:0..Nmax-1 ;
Begin
for i:=0 to Nmax-1 do a[i]:=0;
end;
Function strazryad(dlina)(var a:dlch):word;
var i:word;
Begin
i:=Nmax-1 while (a[i]=0) and (i>0) do i:=i-1; strazryad:=i;
end;}