Cod sursa(job #629261)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 2 noiembrie 2011 23:58:01
Problema Factorial Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
long v[]={5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125};
int p;
int cate_zerouri(long n){
   //cate zerouri are n!
   int k=0,suma=0;
   int x=n;
   while(x!=0 && k<11) {
      x=n/v[k];
      suma+=x;  
      k++;
   }
   return suma;
}

int cauta_n(int li, int ls){
   int x,k;
   printf("caut intre %d si %d\n",li,ls); 
   if(li==ls){
       if(cate_zerouri(li)==p)return li;
       return -1; 
    }
    k=li+(ls-li)/2;
    x=cate_zerouri(k);
    if(x==p){
         return k;
}
    if(x<p)return cauta_n(k+1,ls);
    return cauta_n(li,k-1);
}

int main(){
  FILE *fin=fopen("fact.in","r");
  FILE *fout=fopen("fact.out","w");
  int n;
  fscanf(fin,"%d",&p);
  int k;
  long x;
  int i;
  int li;int ls=5*p;
  if(p==0)printf("%d\n",1);
    else{
    /*    li=1;
       while(li<=ls){
           //printf("caut intre %d %d\n",li,ls);
           k=li+(ls-li)/2;
           x=cate_zerouri(k);
           //printf("%d! are %d zerouri\n",k,x);
           if(x==p){
               fprintf(fout,"%d\n",k-k%5);
               return 0;
           }
           if(x<p){
              li=k+1; 
           }else{
              ls=k-1;
           }
       }*/
       k=cauta_n(1,100000002);
        fprintf(fout,"%d\n",k-k%5);       
    }
   //fprintf(fout,"%d\n",-1);
return 0;
}