Cod sursa(job #604698)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 24 iulie 2011 16:29:43
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>

#define Inf 10000000000LL

using namespace std;

int P;
long long N=-1, Pow5[100];

void BuildPow5 ()
{
    long long n=5;
    Pow5[0]=1;
    for (int p=1; n<=Inf; n*=5, ++p)
    {
        Pow5[p]=n;
    }
}

long long Calculate (long long n)
{
    long long NZero=0;
    for (int p=1; n/Pow5[p]>0; ++p)
    {
        NZero+=(n/Pow5[p]);
    }
    return NZero;
}

int main()
{
    freopen ("fact.in", "r", stdin);
    freopen ("fact.out", "w", stdout);
    scanf ("%d", &P);
    BuildPow5 ();
    long long L=1, R=Inf;
    while (L<=R)
    {
        long long Mid=(L+R)/2, NZero=Calculate (Mid);
        if (NZero==P)
        {
            N=Mid;
            R=Mid-1;
        }
        if (NZero>P)
        {
            R=Mid-1;
        }
        if (NZero<P)
        {
            L=Mid+1;
        }
    }
    printf ("%lld\n", N);
    return 0;
}