Cod sursa(job #84199)

Utilizator mordredSimionescu Andrei mordred Data 13 septembrie 2007 22:33:03
Problema Factorial Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdlib>
#include<string>

unsigned long long  ndz(unsigned long long x);
unsigned long long  p;

int main(){

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

if(p==1){printf("5\n");return 0;}

unsigned long long  a=0,b=100000001, c, aux;
while(b-a>1){
c=(a+b)/2;
aux=ndz(c);    
if(aux<p) a=c+1;
else if(aux>p) b=c-1;
else if(aux==p){printf("%lld\n",c/5*5);return 0;}
}

//int k=3;
//
//while(k){
//c=(a+b)/2;
//aux=ndz(c);    
//if(aux<p){a=c+1;k-=(p-aux==1);}
//else if(aux>p){b=c-1;k-=(aux-p==1);}
//else if(aux==p){printf("%lld\n",c);return 0;}
//}
printf("-1\n");
        
return 0;    
}

unsigned long long  ndz(unsigned long long  x){
long nr=0;
while(x>=5){x/=5;nr+=x;}   
return nr;
}