Pagini recente » Cod sursa (job #2791285) | Cod sursa (job #1213566) | Cod sursa (job #963345) | Cod sursa (job #540047) | Cod sursa (job #525055)
Cod sursa(job #525055)
//Zeroes(N!) = N / 5 + N / 25 + N / 125 + ... + N / 5^k, until a division becomes 0
#include <iostream>
#include <cstdio>
#include <limits>
using namespace std;
FILE *f = fopen("fact.in", "r");
FILE *g = fopen("fact.out", "w");
long mij1 = -1, P;
int calcZeros(long num)
{
int rez = 0;
while (num)
{
rez += num / 5;
num /= 5;
}
return rez;
}
void bs(long li, long ls)
{
while(li <= ls)
{
long mij = (li + ls)>>1;
mij=mij-mij%5;
if(mij == mij1)
break;
int nrz = calcZeros(mij);
if(nrz > P)
ls = mij - 1;
else
if(nrz < P)
li = mij + 1;
if(nrz == P)
{
fprintf(g, "%ld", mij);
return;
}
mij1 = mij;
}
fprintf(g, "-1\n");
return;
}
int main(void)
{
fscanf(f, "%ld", &P);
bs(0, 5*P);
fclose(f);
fclose(g);
return 0;
}