Cod sursa(job #84049)

Utilizator mordredSimionescu Andrei mordred Data 13 septembrie 2007 11:11:37
Problema Factorial Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
//sare din timp
#include<cstdlib>
#include<string>

long long pow5(int x);

const long long MAXSIZE=20000001;
char fiveFlags[MAXSIZE];
long long n;
long long aux,add,t;
long long i,j,x;
int int_i;

int main(){

freopen("fact.in","r",stdin);freopen("fact.out","w",stdout);
scanf("%lld",&n);

t=1;int_i=1;x=1;
while(t<=n)
    {
     while(t*x<=n)   
        {
         fiveFlags[t*x]=int_i;
         x++;   
        }
     int_i++;t*=5;x=1;   
    }
    
   //for(i=0;i<200;i++)printf("%d\n",fiveFlags[i]);
    
i=0;j=1;add=0;
while(i+add<n)
    {
     i+=5;add+=fiveFlags[j];j++;
    }
    j--;
/*printf("%d %d\n",i,add);*/if(i+add==n){printf("%lld",i*5);return 0;}
/*printf("%d\n",i+add-fiveFlags[j]-1);*/if(i+add-fiveFlags[j]-1==n){printf("%lld",(i-1)*5);return 0;}
/*printf("%d\n",i+add-fiveFlags[j]-2);*/if(i+add-fiveFlags[j]-2==n){printf("%lld",(i-2)*5);return 0;}
/*printf("%d\n",i+add-fiveFlags[j]-3);*/if(i+add-fiveFlags[j]-3==n){printf("%lld",(i-3)*5);return 0;}
/*printf("%d\n",i+add-fiveFlags[j]-4);*/if(i+add-fiveFlags[j]-4==n){printf("%lld",(i-4)*5);return 0;}
    
printf("%lld\n",-1);
        
return 0;    
}