Программа сложения и вычитания больших чисел
Категория: Delphi/Pascal
2012-03-04 21:04:20
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.
Поделиться: