Cod sursa(job #314534)

Utilizator iulia609fara nume iulia609 Data 12 mai 2009 00:07:13
Problema Factorial Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
using namespace std;

long long z;

long long kmax(long long n)
 {long long x=n,kt;
  kt=0;
  while(x>=5) {x/=5;kt++;}
 return kt;
 }

 long long calculare(long long n)
  {long long ptemp=5,i,sumz=0,k;
   k=kmax(n);
   for(i=1;i<=k;i++)
	 {sumz+=(int)(n/ptemp);
      ptemp*=5;
	 }
	return sumz;   
  }
  
 long long cautare(long long inc, long long sf)
  {long long mij=(inc+sf)>>1,s;
   mij=mij-mij%5;
   s=calculare(mij);
   if(s==z) return mij+1;
     else if(mij<inc) return -1;
     //else if(z==s) return mij;
    //else if(inc>sf) return -1;
     else if(z>s) return cautare(mij+1,sf);
		else return cautare(inc,mij-1);
	 //else if (z==s) return mij;
   }

 int main()
  {long long nr=10000000000LL,rasp;
   
   FILE*f=fopen("fact.in","r"); 
   FILE*g=fopen("fact.out","w");	

   fscanf(f,"%lld",&z);
   
   if(z==0)fprintf(g,"0\n");
   else if(z==1) fprintf(g,"5\n");
   else
   {rasp=cautare(1,nr);
  
  /*if((rasp+1)%5==0)  
	  fprintf(g,"%lld\n",rasp+1);
  else if((rasp-1)%5==0)
	  fprintf(g,"%lld\n",rasp-1);
  else if((rasp-2)%5==0)
	  fprintf(g,"%lld\n",rasp-2);
  else if((rasp+2)%5==0)
	  fprintf(g,"%lld\n",rasp+2);
	else*/  
   if (rasp!=-1) rasp=rasp-rasp%5;
   fprintf(g,"%lld\n",rasp);
   }
  fclose(f);
  fclose(g);
  return 0;
  }