Cod sursa(job #188833)

Utilizator laplaceConstantin Macari laplace Data 10 mai 2008 01:57:11
Problema Factorial Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
   /*Se da un numar intreg P. Sa se gaseasca cel mai mic numar natural strict  
   pozitiv N pentru care N! are exact P cifre de 0 la sfarsit. 
    
   Se stie ca N! = 1 * 2 * 3 * .... * (N - 1) * N. 
   Exemplu : 0 --> 1 
             2 --> 10 
             10 --> 45*/  
     
   #include<stdio.h>  
   #include<stdlib.h>  
     
   const long MAX=10000;  
     
   long n;  
     
   long factor(int m){  
        if (0 == m)  
           return 1;  
        else  
            return (m * factor(m-1));  
   }  
     
   long ten(long m){  
       long int i=0;  
       while(m>=5){  
                   if(m%5==0)  
                             i++;  
                   m/=5;  
                   }  
       return i-1;  
   }    
     
   long fact(long a,long b,long n){  
        long c=(a+b)/2;  
        if(ten(factor(c))==n)  
                             return c;  
        else  
            if(a<b)  
                  if(ten(factor(c))<n)  
                                       fact(c+1,b,n);  
                   else  
                       fact(a,c-1,n);  
   }  
     
   int main(){  
       freopen("fact.in","r",stdin);  
       freopen("fact.out","w",stdout);  
       scanf("%ld",&n);  
       long a=0;long b=1<<31; 
       if(n==0){
                printf("%d",1); 
                exit(0);
                }
       long rez=fact(a,b,n);  
       if(rez)  
              printf("%ld",rez);  
       else(printf("%d",-1));  
       return 0;  
   }