Cod sursa(job #73285)

Utilizator gigi_becaliGigi Becali gigi_becali Data 17 iulie 2007 17:59:09
Problema Factorial Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>
FILE *f=fopen("fact.in","r"),
     *g=fopen("fact.out","w");
long long p,n,i,v,m,ok;
long long zero(long long n)
{ long long q=5,k=0;
  while(q<n) { k+=n/q;
	       q*=5;
	     }
  return k;
}
long long caut(long long k)
{ while(zero(k)==p && k)--k;
	++k;
//	while(k%5) --k;
  return k;
}

int main()
{ fscanf(f,"%lld",&p);
  n=500000000;
  long long left=1,right=n;
  ok=1;
  while(left<=right&&ok){ m=(left+right)>>1;v=zero(m);
			  if(v==p) n=caut(m),ok=0;
			  else if(left>=right)break;
			  else if(v>p) right=m+1;
			       else left=m;
			}
  if(p==0) fprintf(g, "1\n");
  else
  if(n==0) fprintf(g, "%lld\n", -1);
  else
  if(!ok)fprintf(g,"%lld\n",n);
  else fprintf(g,"-1\n");
  fclose(f);
  fclose(g);
  return 0;
}