Pagini recente » Cod sursa (job #1927310) | Cod sursa (job #3161746) | Cod sursa (job #1376015) | Cod sursa (job #2363446) | Cod sursa (job #87354)
Cod sursa(job #87354)
#include <stdio.h>
#include <stdlib.h>
long int n0(long int x){
int t;
t=0;
while(x){
t+=x/5;
x=x/5;
}
return t;
}
long int find_p(long int *v , long int inf , long int sup , long int P){
long int mijloc;
mijloc=(inf+sup)/2;
if (v[mijloc]==P)
return mijloc;
if (inf==sup)
return -1;
if (v[mijloc]<P)
return find_p(v,mijloc+1,sup,P);
else
return find_p(v,inf,mijloc-1,P);
}
int main(){
FILE *fin,*fout;
fin=fopen("fact.in","rt");
fout=fopen("fact.out","wt");
long int N,P,*v,i;
fscanf(fin,"%ld",&P);
if (P<0){
fprintf(fout,"-1");
goto close;
}
if (P==0){
fprintf(fout,"1");
goto close;
}
N=P*5;
v=(long int *)malloc(N*sizeof(long int));
for (i=1;i<=N;i++){
v[i]=n0(i);
}
i=find_p(v,1,N,P);
if (i==-1){
fprintf(fout,"-1");
}
else {
i=i/5;
i=i*5;
fprintf(fout,"%ld",i);
}
free(v);
close:
fclose(fin);
fclose(fout);
return 0;
}