Cod sursa(job #834663)

Utilizator enedumitruene dumitru enedumitru Data 14 decembrie 2012 21:51:05
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>
#define LL long long
using namespace std;
LL Nmax;
ifstream f("fact.in"); ofstream g("fact.out");
int p,q;
LL p5[50];
inline LL ff(LL n)
{   LL nr = 0;
    int i = 1;
    while(p5[i] <= n)
    {   nr = nr + n / p5[i];
        ++i;
    }
    return nr;
}
int cauta()
{   LL s = 1, d = p5[q], m,v;
    while(s <= d)
    {   m= (s + d)>>1;
        v = ff(m);
        if(p == v) { m = m - (m % 5); return m;}
        else
        {   if(p < v) d = m - 1;
            else
                s = m + 1;
        }
    }
    return -1;
}
int main()
{   Nmax = (1<<31);
    Nmax *= Nmax;
    f>>p;
    p5[0] = 1;
    for(q = 1; p5[q - 1] < Nmax; ++q) p5[q] = p5[q -1] * 5;
    q--;
    if(p)
        {
            int val = cauta();
            g<<val<<'\n';
        }
    else
        g<<1<<'\n';
    return 0;
}