Pagini recente » Cod sursa (job #623532) | Cod sursa (job #198021) | Cod sursa (job #540096) | Cod sursa (job #2813800) | Cod sursa (job #2549006)
#include <cstdio>
unsigned long long int Numar0;
unsigned long long int Rezultat;
int main()
{
unsigned long long int Control = 0;
// unsigned long int RezultatPrimitiv = 5;
unsigned long long int st, dr = 2000000000, mij, p;
FILE * FFACT = fopen("fact.in", "r");
fscanf(FFACT, "%llu", &Numar0);
fclose(FFACT);
while (st <= dr)
{
mij = ((st + dr) >> 1), Control = 0, p = 5;
while (mij >= p) Control += mij / p, p *= 5;
if (Control == Numar0) break;
else if (Control < Numar0) st = mij + 1;
else dr = mij - 1;
}
/* TOO SLOW
while (Control < Numar0)
{
Rezultat = RezultatPrimitiv;
while (RezultatPrimitiv % 5 == 0) ++Control, RezultatPrimitiv /= 5;
RezultatPrimitiv = Rezultat + 5;
}
*/
FFACT = fopen("fact.out", "w");
if (Control == Numar0) fprintf(FFACT, "%llu", mij - mij % 5);
else fprintf(FFACT, "-1");
/*
if (Control == Numar0) fprintf(FFACT, "%lu\n", Rezultat);
else fprintf(FFACT, "-1\n");
*/
fclose(FFACT);
return 0;
}