Программа сложения и вычитания больших чисел

code: #pascal
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.      
Поделиться:

Похожие статьи: