Cod sursa(job #1200029)
Utilizator | Data | 21 iunie 2014 17:27:25 | |
---|---|---|---|
Problema | Factorial | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.66 kb |
#include <cstdio>
using namespace std;
typedef long long unsigned tip;
tip p,b=(1<<64)-1,nrz,SOL;
bool ok;
tip fact(tip x)
{
tip sol=0;
for(x/=5;x;x/=5)
sol+=x;
return sol;
}
void bs(tip st,tip dr)
{
if(st+1==dr)return;
tip mi=(st+dr)/2;
nrz=fact(mi);
if(nrz==p)
{
SOL=mi;
bs(st,mi);
return;
}
if(nrz<p)
bs(mi,dr);
else
bs(st,mi);
}
int main()
{
freopen("fact.in","r",stdin);
freopen("fact.out","w",stdout);
scanf("%lld",&p);
bs(0,b);
if(SOL)
printf("%lld\n",SOL);
else
printf("-1\n");
return 0;
}