Cod sursa(job #274854)

Utilizator DarkByteVictor Pop DarkByte Data 10 martie 2009 00:30:36
Problema Factorial Scor 25
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.09 kb
var P : longint;
    f : textfile;
    N : int64;

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);
  
  case P of
    0  : N := 1
    else N := CautaBinar(P, 1, 10000000000);
  end;
  
  Write(f, N);
  Close(f);
end.