Cod sursa(job #969901)

Utilizator BFlorin93Balint Florin-Lorand BFlorin93 Data 5 iulie 2013 17:04:46
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>


int putericinci[14];

int zerouri(int n)
{
int z=0;
int i=1;

if (n>=5) {
    while (n/putericinci[i]>0)
        {
            z=z+(n/putericinci[i]);
            i++;
        }
     }
  return z;
  //functia returneaza cate zerouri are n!
}

int binarysearch(int A,int B,int P)
{
 int ok=-1;
// printf("pas");

 if (zerouri(5*A)==P) ok=A;
 else if (zerouri(5*B)==P) ok=B;
 else if ((A!=B) && (A+1 !=B))
 {
     if ((zerouri(5*((A+B)/2)))>=P) ok=binarysearch(A,(A+B)/2,P);
     else ok=binarysearch((A+B)/2 ,B,P);
 }

 return ok;
 //cauta binar un numar x intre 5A si 5B pt care zerouri(5x)=p
}




int main()
{
 int p;
 int ok=1;

 putericinci[0]=1;
 for (ok=1;ok<=13;ok++) putericinci[ok]=5*putericinci[ok-1];

  FILE *f;
  FILE *g;

 f=fopen("fact.in","r");
 g=fopen("fact.out","w");



 fscanf(f,"%d",&p);

 if (p==0) ok=1;
 else if (binarysearch(0,p+2,p)==-1) ok=-1;
 else ok=5*binarysearch(0,p+2,p);

 fprintf(g,"%d",ok);


 return 0;
}