Cod sursa(job #274850)

Utilizator DarkByteVictor Pop DarkByte Data 10 martie 2009 00:19:27
Problema Factorial Scor 25
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.06 kb
var P : longint;
    f : textfile;

function CountFactZero(N : int64) : int64;
var i : int64;
begin
  i := 0;
  while N > 0 do
    begin
      n := n div 5;
      inc(i, N);
    end;
  inc(i, N);  
  CountFactZero := i;
end;

function CautaBinar(P, s, f : int64) : integer;
var z, mid : int64;
    rez : integer;
begin
  CautaBinar := -1;
  if s >= f
    then CautaBinar := -1;
  mid := (s+f) div 2;
  z := CountFactZero(mid);
  if z = -1 then
    begin
      CautaBinar := -1;
      exit;
    end;

  if z = p then
    begin
      rez := mid;
      while CountFactZero(rez-1) = p do
        dec(rez);
      CautaBinar := rez;  
      Exit;
    end;

  if (mid < f) and (mid > s) then
    if z < P
      then CautaBinar := CautaBinar(P, mid, f)
      else CautaBinar := CautaBinar(P, s, mid - 1)
    else Exit;  
end;

begin
  Assign(f, 'fact.in');
  Reset(f);
  Read(f, P);
  Close(f);

  Assign(f, 'fact.out');
  Rewrite(f);
  if P = 0
    then Write(f, '1')
    else Write(f, CautaBinar(P, 0, 410000000));
  Close(f);
end.