Cod sursa(job #200276)

Utilizator IrnukIrina Grosu Irnuk Data 23 iulie 2008 00:34:52
Problema Factorial Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.05 kb
/*factorial 
Factorial

Se da un numar intreg P. Sa se gaseasca cel mai mic numar natural strict pozitiv N pentru care N! are exact P cifre de 0 la sfarsit.

Se stie ca N! = 1 * 2 * 3 * .... * (N - 1) * N.

Date de intrare
Fisierul fact.in va contine pe prima linie numarul intreg P.

Date de iesire
Pe prima linie a fisierului fact.out se va scrie acel numar N care indeplineste condiitle impuse sau -1 daca nu exista un astfel de N.

Restrictii
0 = P = 10^8 
*/

#include<fstream.h>

unsigned long p,n;

ifstream fin("fact.in");
ofstream fout("fact.out");

unsigned long sparge(unsigned long n)
{
	unsigned long numara=0;
	while(n%5==0)
	{
		n=n/5;
		numara++;
	}
	return numara;
}

int main()
{
	fin>>p;
	if(p==0) fout<<"1\n";
	else
		if(p>97500000)
		{
			p-=97500000;
			n=390000020;
		}
		if(p>95000000)
		{
			p-=95000000;
			n=380000020;
		}
		else
			if(p>92500000)
		{
			p-=92500000;
			n=370000015;
		}
		else

		if(p>90000000)
		{
			p-=90000000;
			n=360000015;
		}
		else
			if(p>87500000)
		{
			p-=87500000;
			n=350000010;
		}
		else
		if(p>85000000)
		{
			p-=85000000;
			n=340000015;
		}
		else
		if(p>80000000)
		{
			p-=80000000;
			n=320000015;
		}
		else
			if(p>77500000)
		{
			p-=77500000;
			n=310000015;
		}
		else
		if(p>75000000)
		{
			p-=75000000;
			n=300000010;
		}
		else
		if(p>70000000)
		{
			p-=70000000;
			n=280000015;
		}
		else
		if(p>67500000)
		{
			p-=67500000;
			n=270000010;
		}
		else
		if(p>65000000)
		{
			p-=65000000;
			n=260000010;
		}
		else
		if(p>60000000)
		{
			p-=60000000;
			n=240000020;
		}
		else
			if(p>57500000)
		{
			p-=57500000;
			n=230000020;
		}
		else
		if(p>55000000)
		{
			p-=55000000;
			n=220000015;
		}
		else
			if(p>52500000)
		{
			p-=52500000;
			n=210000015;
		}
		else
		if(p>50000000)
		{
			p-=50000000;
			n=200000010;
		}
		else
			if(p>47500000)
		{
			p-=47500000;
			n=190000015;
		}
		else
		if(p>45000000)
		{
			p-=45000000;
			n=180000015;
		}
		else
		if(p>40000000)
		{
			p-=40000000;
			n=160000015;
		}
		else
				if(p>37500000)
		{
			p-=37500000;
			n=150000010;
		}
		else
		if(p>35000000)
		{
			p-=35000000;
			n=140000015;
		}
		else
		if(p>30000000)
		{
			p-=30000000;
			n=120000010;
		}
		else
			if(p>27500000)
		{
			p-=27500000;
			n=110000010;
		}
		else
		if(p>25000000)
		{
			p-=25000000;
			n=100000005;
		}
		else
		if(p>20000000)
		{
			p-=20000000;
			n=80000015;
		}
		else
			if(p>17500000)
		{
			p-=17500000;
			n=70000010;
		}
		else
		if(p>15000000)
		{
			p-=15000000;
			n=60000010;

		}
		else
			if(p>10000000)
			{
				p-=10000000;
				n=40000010;
			}
		else
			if(p>7500000)
		{
			p-=7500000;
			n=30000010;
		}
		if(p>5000000)
		{
			p-=5000000;
			n=20000005;
		}
		else
		if(p>2500000)
		{
			p-=2500000;
			n=10000005;
		}
	
			

		
			while(p>0)
			{
				n+=5;
				p-=sparge(n);
			}
	

	fout<<n<<'\n';
	fout.close();
	return 0;
}