Cod sursa(job #91949)

Utilizator ada_sAda-Mihaela Solcan ada_s Data 13 octombrie 2007 21:11:18
Problema Factorial Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
std::ifstream f1("fact.in");
std::ofstream f2("fact.out");

long long nrz(long long x);
long long bsearch(long long jos, long long sus, long long nr);

int main()
{
	long long p, r;
	f1>>p;
	r=bsearch(0, 100000000, p);
	if (r<0)
		f2<<r;
	else
	{
	  while ((r%5)!=0)
		  r--;
    if (r==0)
	    f2<<"1";
		else
    	f2<<r;
 	}//else
	f1.close();
	f2.close();
	return 0;
}//main

long long nrz(long long x)
{
	long long rez, temp;
	temp=x;
	rez=0;
	while ((temp/5)>0)
	{
		rez+=temp/5;
		temp/=5;
	}//while
	return rez;
}//nrz

long long bsearch(long long jos, long long sus, long long nr)
{
	long long mij=(jos+sus)/2;
	long long nm=nrz(mij);
	while ((jos<=sus)&&(nm!=nr))
	{
		mij=(jos+sus)/2;
		nm=nrz(mij);
		if (nm<nr)
		  jos=mij+1;
	  else
			if (nm>nr)
	  		sus=mij-1;
	}//while
	if (nm==nr)
  	return mij;
	else
		return -1;
}//bsearch