Cod sursa(job #793533)

Utilizator cristiprgPrigoana Cristian cristiprg Data 3 octombrie 2012 14:50:07
Problema Factorial Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#include <limits.h>
long long f(long long x)
{
    if (x < 5)
        return 0;

    long long i = 5, putere = 0;
    while(i <= x)
    {
        putere += x / i;
        i *= 5;
    }

    return putere;

}

long long bin_search(long long left, long long right, long long P)
{


    if(right - left <= 1)
    {
        if (P < f(right))
            return -1;//nu exista
        return right;
    }


    long long middle = (left + right) / 2;
   // prlong longf("%d %d %d\nf(%d) = %d\n", left, middle,  right, middle, f(middle));

    if ( f (middle) >= P)
        return bin_search(left, middle, P);
    else
        return bin_search(middle, right, P);

}

int main()
{
    FILE *f = fopen("fact.in", "r");
    long long P;
    fscanf(f, "%lld", &P);
    fclose(f);

    f = fopen("fact.out", "w");
    fprintf(f, "%lld\n", bin_search(1,INT_MAX-1, P));
    fclose(f);




    return 0;
}