Cod sursa(job #68423)

Utilizator mlazariLazari Mihai mlazari Data 27 iunie 2007 20:42:03
Problema Factorial Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
Program Factorial;
const f : array[1..13] of longint=(5,25,125,625,3125,15625,78125,390625,
                          1953125,9765625,48828125,244140625,1220703125);
      z : array[1..13] of longint=(1,6,31,156,781,3906,19531,97656,488281,
                          2441406,12207031,61035156,305175781);
{ f[i]=5^i; z[i] - cel mai mare numar natural pentru care f[i] mod z[i]=0 }
var P,N : longint;

procedure Citeste;
var Intrare : text;
begin
  assign(Intrare,'fact.in');
  reset(Intrare);
  readln(Intrare,P);
  close(Intrare);
end;

procedure Calculeaza;
var i : integer;
    nz,cit : longint;
begin
  if P=0 then N:=1
   else
    begin
      N:=0;
      nz:=P;
      i:=13;
      while nz>0 do
       begin
         cit:=nz div z[i];
         if cit<5 then
          begin
            N:=N+cit*f[i];
            nz:=nz mod z[i];
          end
          else
           begin
             N:=-1;
             nz:=0;
           end;
         i:=i-1;
       end;
    end;
end;

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

begin
  Citeste;
  Calculeaza;
  Scrie;
end.