Cod sursa(job #10328)

Utilizator DastasIonescu Vlad Dastas Data 28 ianuarie 2007 12:02:02
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

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

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

    return s;
}


int main()
{
    fscanf(in, "%lld", &p);
    if ( p == 0 )
    {
        fprintf(out, "%d\n", 1);
        return 0;
    }
    long long c;
    long long a = 0, b = 10000000000LL;
    long long f;
    while ( a < b-1 )
    {
        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", c);
    else
        fprintf(out, "%d", -1);

    return 0;
}