Cod sursa(job #93395)

Utilizator savimSerban Andrei Stan savim Data 18 octombrie 2007 18:20:55
Problema Factorial Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <stdlib.h>
int main()
{
	long ver,gas,i,p,k,nr1,nr2,n,st,dr;
	FILE *f1,*f2;

	f1=fopen("fact.in","r");
	f2=fopen("fact.out","w");
	fscanf(f1,"%ld",&p);
	st=0;
	dr=2000000000;
	gas=0;
	ver=p;
	while (ver%5==0)
	{
		ver=ver/5;
	}
	if (ver==1 && p!=1)
	{
		fprintf(f2,"-1");
		fclose(f1);
		fclose(f2);
		exit(0);
	}
	while (gas!=1)
	{
		k=1;nr1=0;nr2=0;
		while (k<48825125)
		{
			k=k*5;
			nr1=nr1+(st-st%k)/k;
			nr2=nr2+(dr-dr%k)/k;
		}
		if (nr1==p)
		{
			n=st;
			gas=1;
		}
		if (nr2==p)
		{
			n=dr;
			gas=1;
		}
		if (gas==0)
		{
			nr1=st+((dr-st+1)-(dr-st+1)%2)/2;
			k=1;nr2=0;
			while (k<48825125)
			{
				k=k*5;
				nr2=nr2+(nr1-nr1%k)/k;
			}
			if (nr2==p)
			{
				n=nr1;
				gas=1;
			}
			else
				if (nr2>p) dr=nr1;
				else st=nr1;
		}
	}
	gas=0;
	while (gas==0)
	{
		nr1=n-1;
		nr2=0;k=1;
		while (k<48825125)
		{
			k=k*5;
			nr2=nr2+(nr1-nr1%k)/k;
		}
		if (nr2==p) n--;
		else gas=1;
	}
	if (n!=0) fprintf(f2,"%ld",n);
	else fprintf(f2,"1");
	fclose(f1);
	fclose(f2);
	return 0;
}