Cod sursa(job #9139)
Utilizator | Data | 26 ianuarie 2007 20:41:32 | |
---|---|---|---|
Problema | Factorial | Scor | 85 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <stdio.h>
FILE *in = fopen("fact.in", "r"), *out = fopen("fact.out", "w");
int p;
long long zfact(long long n)
{
long long s = 0;
while (n)
{
s += n / 5;
n /= 5;
}
return s;
}
int main()
{
fscanf(in, "%d", &p);
long long c;
long long a = 0, b = 1000000000LL;
long long f;
while ( a < b )
{
c = (a + b)/2;
f = zfact(c);
if ( f < p )
a = c + 1;
else if ( f > p )
b = c - 1;
else
break;
}
while ( c % 5 )
{
--c;
}
fprintf(out, "%lld\n", c);
return 0;
}