Cod sursa(job #9155)

Utilizator DastasIonescu Vlad Dastas Data 26 ianuarie 2007 21:04:59
Problema Factorial Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>

FILE *in = fopen("fact.in", "r"), *out = fopen("fact.out", "w");
int p;

long long zfact(long long n)
{
    long long s = 0;
    while (n)
    {
        s += n / 5;
        n /= 5;
    }

    return s;
}


int main()
{
    fscanf(in, "%d", &p);
    if ( p == 0 )
    {
        fprintf(out, "%d\n", 1);
        return 0;
    }
    long long c;
    long long a = 0, b = 1000000000LL;
    long long f;
    while ( a < b )
    {
        c = (a + b)/2;
        f = zfact(c);

        if ( f < p )
            a = c + 1;
        else if ( f > p )
            b = c - 1;
        else
            break;
    }

    while ( c % 5 )
    {
        --c;
    }

    if ( zfact(c) != p )
        fprintf(out, "%lld\n", -1);
    else
        fprintf(out, "%lld\n", c);

    return 0;
}