Cod sursa(job #250660)

Utilizator dyzzy_dyzzyStanciulescu Daniel dyzzy_dyzzy Data 31 ianuarie 2009 14:58:43
Problema Factorial Scor 60
Compilator fpc Status done
Runda Arhiva de probleme Marime 1 kb
const fin='fact.in';
      fout='fact.out';
var p,pnou,plo:longint;
    n,li,lo:int64;
    f,g:text;


function calculare(n:int64):longint;
var nr0:longint;
begin
nr0:=0;
while n <>0 do
begin
  nr0:=nr0+n div 5;
  n:=n div 5;
end;
calculare:=nr0;
end;

procedure binar(li,lo:int64);
var mij:int64;
    begin
if li=lo then begin
   if p=calculare(li) then
        n:=li
   else
       n:=-1;
   exit;

   end
else begin
   mij:=(li+lo) shr 1;
   if mij mod 5<>0 then
     mij:=mij-2;
   pnou:=calculare(mij);
  if p=pnou then begin
    n:=mij;
    exit;
  end;
  if p<pnou then
    binar(li,mij)
  else binar(mij+1,lo);
end;
end;

begin
assign(f,fin);
assign(g,fout);
reset(f);
readln(f,p);
close(f);

if p=0 then
  n:=1
else begin
  li:=5;
  lo:=25;
  plo:=6;
  while plo<=p do
  begin
     li:=lo;
     lo:=lo*5;
     plo:=plo+lo div 5;
  end;
  binar(li,lo);
end;
rewrite(g);
if n-1 mod 5=0 then
writeln(g,n-1)
else writeln(g,n);
close(g);
end.