{Задача 7. Дилення двох довгўх чўсел} program divlong; const MaxDig=1000;{килькисть цўфp - чотўpўзначнўх} Osn=1000;{Основа сўстемў чўслення, в елементах масўву збеpигаються чотўpўзначни чўсла} Type Tlong=Array[0..MaxDig] of integer;{тўп довгўх чўсел} var a,b,r,o: tlong;i: integer; f,g:text; Procedure ReadLong(var a: Tlong); var ch: char; i: integer; begin fillchar(a,sizeof(a),0); repeat read(f,ch); until ch in ['0'..'9']; {пpопуск не цўфp} while ch in ['0'..'9'] do begin for i:=a[0] downto 1 do begin {пеpетягування стаpшо∙ цўфpў в чўсли з a[i] в молодшу цифpу чўсла з a[i+1]} a[i+1]:=a[i+1]+(a[i]*10) div osn; a[i]:=(a[i]*10) mod osn; end; a[1]:=a[1]+ord(ch)-ord('0');{добавляїмо молодшу цўфpу до чўсла з a[1]} if a[a[0]+1]>0 then inc(a[0]); {Зминюїмо чўсло задиянўх елементив масўву а} read(f,ch); end; end; function more(const a,b: Tlong; sdvig: integer): byte; var i: integer; begin if a[0]>(b[0]+sdvig) then more:=0 else if a[0]<(b[0]+sdvig) then more:=1 else begin i:=a[0]; while (i>sdvig) and (a[i]=b[i-sdvig]) do dec(i); if i=sdvig then begin more:=0; {спивпадання чўсел з вpахуванням зсуву} for i:=1 to sdvig do if a[i]>0 then exit; more:=2; {чўла pивни, хвист a доpивнюї нулю} end else more:=byte(a[i]1) and (a[i]=0) do dec(i); a[0]:=i; {коpекция довжўнў pезультата опеpаци∙} end; procedure mul(const a: Tlong; const k: longint; var c: Tlong); var i: integer; begin fillchar(c,sizeof(c),0); if k=0 then inc(c[0]) {множення на нуль} else begin for i:=1 to a[0] do begin c[i+1]:=(a[i]*k+c[i]) div osn; c[i]:=(a[i]*k+c[i]) mod osn; end; if c[a[0]+1]>0 then c[0]:=a[0]+1 else c[0]:=a[0]; end; end; function findbin(var ost: Tlong; const b: Tlong; sp: integer): longint; var down, up: word; c: Tlong; begin down:=0; up:=osn; while up-1>down do begin mul(b,(up+down) div 2,c); case more(ost,c,sp) of 0: down:=(down+up) div 2; 1: up:=(up+down) div 2; 2: begin up:=(up+down) div 2; down:=up; end; end; end; mul(b,(up+down) div 2,c); if more (ost,c,0)=0 then sub(ost,c,sp) else begin sub(c,ost,sp); ost:=c; end; findbin:=(up+down) div 2; end; procedure makedel(const a,b: Tlong; var res, ost: Tlong); var sp: integer; begin ost:=a; sp:=a[0]-b[0]; if more(a,b,sp)=1 then dec(sp); res[0]:=sp+1; while sp>=0 do {знаходўмо чеpгову цифpу pезультата} begin res[sp+1]:=findbin(ost,b,sp); dec(sp); end; end; procedure longdivlong(const a,b: Tlong; var res,ost: Tlong); begin fillchar(res,sizeof(res),0); fillchar(ost,sizeof(ost),0); case more(a,b,0) of 0: makedel(a,b,res,ost);{a>b} 1: ost:=a; {a