Pagini recente » Cod sursa (job #1487696) | Cod sursa (job #340599) | Cod sursa (job #2489173) | Cod sursa (job #2954200) | Cod sursa (job #949033)
Cod sursa(job #949033)
#include <stdio.h>
#define INPUT_FILE "fact.in"
#define OUTPUT_FILE "fact.out"
#define TRUE 1
#define FALSE 0
#define INVALID_RESULT -1
/*** DATA VARIABLES ***/
FILE *f;
unsigned long p, n = INVALID_RESULT;
/*** READ AND WRITE FUNCTIONS ***/
void read()
{
f = fopen(INPUT_FILE, "rt");
fscanf(f, "%d", &p);
fclose(f);
}
void write()
{
f = fopen(OUTPUT_FILE, "wt");
fprunsigned longf(f, "%d", n);
fclose(f);
}
/*** SOLVING PROBLEM FUNCTIONS ***/
unsigned long getZeros(unsigned long value)
{
unsigned long x;
unsigned long answer = 0;
for (x = 5; x <= value; x *= 5)
answer += value / x;
return answer;
}
void solve()
{
unsigned long min = 1, max = 100000000;
unsigned long med, zeros;
while (min < max) {
med = (min + max) / 2;
zeros = getZeros(med);
if (zeros == p) {
if (med < 5)
n = 1;
else
n = med - med % 5;
return;
} else if (zeros > p) {
max = med - 1;
} else {
min = med + 1;
}
}
n = INVALID_RESULT;
}
/*** MAIN ***/
unsigned long main()
{
read();
solve();
prunsigned longf("p = %8d, n = %8d\t", p, n);
write();
return 0;
}