Cod sursa(job #442246)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 13 aprilie 2010 23:53:34
Problema Factorial Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<cstdio>
#include<limits>
using namespace std;
long long n, rez;

inline long long qont(long long x)
{
    long long tmp,nr5=5,rez=0;
    tmp=x/nr5;
    while(nr5<=x)
    {
        rez+=tmp;
        nr5*=5;
        tmp=x/nr5;
    }
    return rez;
}

void cauta(long long st, long long dr)
{
    long long mij=(st+dr)/2;
    long long q0=qont(mij);
    if(q0==n)//daca e bun
    {
        rez=mij;
        while(rez%5>0)
            rez--;
        return;
    }
    else if(st==dr)// daca nu am sol
    {
        rez=-1;
        return;
    }
    else if(q0<n)
        cauta(mij+1, dr);
    else if(q0>n)
        cauta(st, mij-1);

}

int main()
{
    ifstream fin("fact.in");
    ofstream fout("fact.out");
    fin>>n;
    long long st=1, dr=numeric_limits<long long int>::max();
    cauta(st, dr);
    fout<<rez;
    return 0;
}