Cod sursa(job #12561)

Utilizator Ady.hAdrian Hada Ady.h Data 4 februarie 2007 12:58:30
Problema Factorial Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define MAX 400000015
#define INTER 120000010
inline int putere(int x)
{int i=2;
x=x/25;
while (x%5==0)
	{
	i++;
	x/=5;
	}
return i;
}

int main()
{FILE *pf;
pf=fopen("fact.in","r");
int p;
fscanf(pf,"%d",&p);
fclose(pf);
if (p==0) {
	pf=fopen("fact.out","w");
	fprintf(pf,"%d",1);
	fclose(pf);
	return 0;
	}
int n;
if (p<30000000)
{
int numar=0;
for (n=5;numar<p;n+=5)
	if (n%25==0) numar+=putere(n);
		else numar++;
n-=5;
pf=fopen("fact.out","w");
if (numar==p) fprintf(pf,"%d",n);
	else fprintf(pf,"%d",-1);
fclose(pf);
}
else if (p<=60000000)
		{
		int numar=30000000;
		for (n=INTER;numar<p;n+=5)
		if (n%25==0) numar+=putere(n);
			else numar++;
pf=fopen("fact.out","w");
if (numar==p) fprintf(pf,"%d",n);
	else fprintf(pf,"%d",-1);
fclose(pf);
		}
	else
 {int numar=100000000;
	for (n=MAX;numar>p;n-=5)
		if (n%25==0) numar-=putere(n);
			else numar--;
pf=fopen("fact.out","w");
if (numar==p) fprintf(pf,"%d",n);
	else fprintf(pf,"%d",-1);
fclose(pf);
	}

return 0;
}