Часто бывает, когда нужно выполнить операцию вычитания одного числа из другого, которые слишком велики для стандартных типов переменных в языках программирования. Тогда на помощь приходят алгоритмы из так называемой «длинной арифметики»
Ниже подан алгоритм вычитания двух длинных чисел.
Числа для вычитания находятся в файле «Input.txt»
Материал взят тут
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; var s1,s2:string; i,len,c,x:integer; a,b:array[1..1000] of integer;// количество цифр в числах f1,f2:text; begin Assign(f1,'INPUT.TXT'); Reset(f1); Assign(f2,'OUTPUT.TXT'); ReWrite(f2); ReadLn(f1,s1); c:=0; ReadLn(f1,s2); close(f1); 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(f2,'-'); 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; for i:=len downto 1 do {вывод результата в файл} Write(f2,a[i]); close(f2) end.