Pagini recente » Cod sursa (job #280249) | Cod sursa (job #1660334) | Cod sursa (job #2337241) | Cod sursa (job #2212873) | Cod sursa (job #2647604)
#include <stdio.h>
#include <stdlib.h>
#define NMax 1000000001
FILE *f, *g;
int P;
long long findTrailingZeros(long long n)
{
// Initialize result
long long count = 0;
// Keep dividing n by powers of
// 5 and update count
for (long long i = 5; n / i >= 1; i *= 5)
count += n / i;
return count;
}
int main()
{
f = fopen("fact.in", "r");
g = fopen("fact.out", "w");
if(f == NULL)
{
perror("Eroare fisier citire");
exit(1);
}
if(g == NULL)
{
perror("Eroare fisier scriere");
exit(1);
}
fscanf(f, "%d", &P);
/*if(P > 100000000)
{
fprintf(g, "%d", -1);
exit(1);
}
int ct = 0;
long long N = 0;
if(P == 0)
N = 1;
else
{
ct = findTrailingZeros(N);
while(ct < P)
{
N += 5;
ct = findTrailingZeros(N);
}
}
if(ct == P)
fprintf(g, "%ld", N);
else
fprintf(g, "%d", -1);
*/
long long st, dr, N;
int Solution = -1;
st = 1;
dr = NMax;
while(st <= dr)
{
N = (dr + st) / 2;
int ct = findTrailingZeros(N);
if(ct == P)
{
Solution = N;
dr = N - 1;
}
else if(ct < P)
st = N + 1;
else
dr = N - 1;
}
fprintf(g, "%d", Solution);
fclose(f);
fclose(g);
return 0;
}