Cod sursa(job #73301)

Utilizator DjSefuWrong name DjSefu Data 17 iulie 2007 18:19:38
Problema Factorial Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
FILE *f=fopen("fact.in","r"),
     *g=fopen("fact.out","w");
long long p,n,i,v,m,ok,fl,fr,fm;
long long zero(long long n)
{ long long q=5,k=0;
  while(q<n) { k+=n/q;
	       q*=5;
	     }
  return k;
}
int caut(long long k)
{ while(k%5) k--;
  return k;
}

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