Cod sursa(job #68675)

Utilizator MDanFMI - Dan Moldovan MDan Data 29 iunie 2007 01:18:12
Problema Factorial Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.82 kb
const c1=4;
      c2=32;
      c3=212;
      c4=1312;
      c5=7812;
      c6=45312;
      c7=257812;
      c8=1445312;
      c9=8007812;
      c10=43945312;
      c11=239257812;
var p,max,min,aux,auxaux:longint;
    f,g:text;
    ok,ok2:boolean;
    a:array [1..3] of longint;
function nrzero (z:longint):longint;
var coef,nrz,lk,jk:longint;
begin
coef:=1;
nrz:=1;
if z>=24
then
    begin
    coef:=2;
    nrz:=c1;
    end;
if z>=124
then
    begin
    coef:=coef+1;
    nrz:=c2;
    end;
if z>=624
then
    begin
    coef:=coef+1;
    nrz:=c3;
    end;
if z>=3124
then
    begin
    coef:=coef+1;
    nrz:=c4;
    end;
if z>=15624
then
    begin
    coef:=coef+1;
    nrz:=c5;
    end;
if z>=78124
then
    begin
    coef:=coef+1;
    nrz:=c6;
    end;
if z>=390624
then
    begin
    coef:=coef+1;
    nrz:=c7;
    end;
if z>=1953124
then
    begin
    coef:=coef+1;
    nrz:=c8;
    end;
if z>=9765624
then
    begin
    coef:=coef+1;
    nrz:=c9;
    end;
if z>=48828124
then
    begin
    coef:=coef+1;
    nrz:=c10;
    end;
if z>=244140624
then
    begin
    coef:=coef+1;
    nrz:=c11;
    end;
{if z>1220703124
then
    begin
    coef:=coef+1;
    nrz:=c12;
    end;         }
jk:=1;
for lk:=1 to coef do
jk:=jk*5;
z:=z-jk;
{nrz:=nrz+coef;}{+coef*(z div 10)+z div 10;   }
if z mod 2=0
then
    jk:=coef*(z div 10)+(z div 10)
else
    jk:=coef*(z div 10)+((z div 5)-(z div 10));
nrz:=nrz+jk;
nrzero:=nrz;
end;




begin
assign (f,'fact.in');
assign (g,'fact.out');
reset (f);
rewrite (g);
readln (p);
min:=1;
max:=1500000000;
ok:=true;
while ok do
           begin
           auxaux:=nrzero(trunc((min/2)+(max/2)));
           if p<auxaux
           then
               begin
               max:=trunc((min/2)+(max/2));
               a[3]:=a[2];
               a[2]:=a[1];
               a[1]:=max;
               if a[1]=a[3]
               then
                   ok:=false;
               end;
           if p>auxaux
           then
               begin
               min:=trunc((min/2)+(max/2));
               a[3]:=a[2];
               a[2]:=a[1];
               a[1]:=min;
               if a[1]=a[3]
               then
                   ok:=false;
               end;
           if p=auxaux
           then
               begin
               auxaux:=trunc((min/2)+(max/2));
               ok2:=true;
               while ok2 do
               if auxaux mod 5=0
               then
               begin
               writeln (auxaux);
               ok2:=false;
               end
               else
               auxaux:=auxaux-1;
               auxaux:=-1;
               ok:=false;
               end;
           end;

if auxaux<>-1
then
    writeln ('-1');




close(f);
close(g);
end.