Cod sursa(job #475741)

Utilizator nautilusCohal Alexandru nautilus Data 8 august 2010 11:34:16
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<fstream>
using namespace std;

long zerouri[10]={0, 2, 24, 249, 2499, 24999, 249998, 2499999, 24999999, 249999998};
long long p,numar,ok;

long nrzero(long long n)
{
 long m,nr=0;
	
 m=5;
 while (m<=n) 
	 {
	  nr=nr+n/m;
	  m=m*5;
	 }
	
 return nr;
}


void cautare(long long st, long long dr)
{
 long long mijl,nz;
	
 if (st<=dr)
	 {
	  mijl=(st+dr)/2;
	  nz=nrzero(mijl);
	  if (p<=nz)
		  {		
		   if (numar>mijl && nz==p)
			  {
			   numar=mijl;
			   ok=1;
			  }
		   cautare(st,mijl-1);
		  } else
	      cautare(mijl+1,dr);
	 }
}

int main()
{
 long long i,b;

 ifstream fin("fact.in");
 ofstream fout("fact.out");
 fin>>p;
 
 if (p==0)
	 fout<<"1"; else
	 {
	  i=0; b=1;
	  while (zerouri[i]<p)
		 {
		  i++;
		  b=b*10;
		 }
 
	  numar=b+1;
	  cautare(0,b);
 
	  if (ok==1)
		 fout<<numar; else
		 fout<<"-1";
	 }
 
 fin.close();
 fout.close();
 return 0;
}