Cod sursa(job #115363)

Utilizator mlazariLazari Mihai mlazari Data 16 decembrie 2007 12:22:35
Problema Multiplu Scor 20
Compilator fpc Status done
Runda preONI 2008, Runda 2, Clasa a 10-a Marime 1.26 kb
Program Multiplu;
const nmax=300;
var A,B : longint;
    CMMMC,rez : int64;

procedure Citeste;
var Intrare : text;
begin
  assign(Intrare,'multiplu.in');
  reset(Intrare);
  readln(Intrare,A,B);
  close(Intrare);
end;

procedure AflaCMMMC(A,B : longint);
var R,_a,_b : longint;
begin
  if A>B then
   begin
     R:=A;
     A:=B;
     B:=R;
   end;
  _a:=A;
  _b:=B;
  R:=A mod B;
  while R<>0 do
   begin
     A:=B;
     B:=R;
     R:=A mod B;
   end;
  CMMMC:=_a div B*_b;
end;

function NumarCorect(num : int64) : boolean;
var nc : boolean;
begin
  nc:=true;
  while (num<>0) and nc do
   begin
     nc:=num mod 10<2;
     num:=num div 10;
   end;
  NumarCorect:=nc;
end;

procedure ToNext(var num : int64);
var z : int64;
begin
  z:=1;
  while num div z>9 do z:=z*10;
  while num div z mod 10<2 do z:=z div 10;
  if z<CMMMC then num:=num+CMMMC
   else num:=num+(10*z-num mod (10*z)) div CMMMC*CMMMC+CMMMC;
end;

procedure Calculeaza;
begin
  AflaCMMMC(A,B);
  rez:=CMMMC;
  while not NumarCorect(rez) do ToNext(rez);
end;

procedure Scrie;
var Iesire : text;
begin
  assign(Iesire,'multiplu.out');
  rewrite(Iesire);
  write(Iesire,rez);
  close(Iesire);
end;

begin
  Citeste;
  Calculeaza;
  Scrie;
end.