Cod sursa(job #147295)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 2 martie 2008 19:29:01
Problema Factorial Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.63 kb
var n,i,p,j,k:int64;
    f:text;
begin
   i:=0;
   p:=0;
   assign(f,'fact.in');
   reset(f);
   read(f,n);
   close(f);
   assign(f,'fact.out');
   rewrite(f);
   if n=0 then writeln(f,1)else
   begin
 {  k:=0;
   while(p+305175781<=n)and(k<4)do
   begin
   k:=k+1;
   i:=i+1220703125;
   p:=p+305175781;
   end;
   k:=0;
   while(p+61035156<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+244140625;
   p:=p+61035156;
   end;   }
   k:=0;
   while(p+12207031<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+48828125;
   p:=p+12207031;
   end;
   k:=0;
   while(p+2441406<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+9765625;
   p:=p+2441406;
   end;
   k:=0;
   while(p+488281<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+1953125;
   p:=p+488281;
   end;
   k:=0;
   while(p+97656<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+390625;
   p:=p+97656;
   end;
   k:=0;
   while(p+19531<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+78125;
   p:=p+19531;
   end;
   k:=0;
   while(p+3906<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+15625;
   p:=p+3906;
   end;
   k:=0;
   while(p+781<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+3125;
   p:=p+781;
   end;
   k:=0;
   while(p+156<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+625;
   p:=p+156;
   end;
   k:=0;
   while(p+31<=n)and(k<4) do
   begin
   k:=k+1;
   i:=i+125;
   p:=p+31;
   end;
   k:=0;
   while(p+6<=n)and(k<4) do
   begin
   i:=i+25;
   p:=p+6;
   end;
   k:=0;
   while(p+1<=n)and(k<4)do
   begin
   k:=k+1;
   i:=i+5;
   p:=p+1;
   end;
   if p<>n then writeln(f,-1) else
   writeln(f,i);
   end;
   close(f);
end.