Cod sursa(job #446530)

Utilizator om6gaLungu Adrian om6ga Data 26 aprilie 2010 05:11:13
Problema Factorial Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
#include <math.h>
int p;

int min(int a,int b)
{
    if (a<b) return a;   
    return b;
}

int nrcinci(int n)
{
    int rez=0,i;   
    for (i=1;i<=13;i++)
        rez+=n/pow(5,i);
    return rez;
}

int cauta(int n1,int n2)
{
     //printf("%d  %d\n",n1,n2);
     if (n1==n2)
     {
        //printf("n1 = %d\n",n1);
        if (nrcinci(n1)==p)
           return n1;  
        else
            return -1;      
     }
    int aux=(n1+n2)/2;
    if (nrcinci(aux)==p)
       return aux;
    if (nrcinci(aux)<p)
       return cauta(aux+1,n2);
    return cauta(n1,aux); 
}



int main()
{
    FILE *in,*out;
    in=fopen("fact.in","r");
    out=fopen("fact.out","w");
    fscanf(in,"%d",&p);
    
    //p=10;
    int n=floor(log(4*p+1)/log(5));
    int N1=pow(5,n);                     // <5^13
    int N2=pow(5,n+1);
    //printf("%d  %d\n",N1,N2);
    int rez=cauta(N1,N2);
    
    //printf("%d   \n\n",cauta(N1,N2));
    //printf("%d  ",nrcinci(9765625));
    //getchar();
    fprintf(out,"%d",rez);
    return 0;
}





/*
25                 6
125               31
625               156
3125             781
15625           3906
78125           19531
390625         97656
1953125       488281
9765625       2441406
48828125     12207031
244140625   61035156
1220703125 305175781

*/