Cod sursa(job #87354)

Utilizator sanaDascalu Laurentiu sana Data 27 septembrie 2007 00:28:48
Problema Factorial Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 0.95 kb
#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;
}