Pagini recente » Cod sursa (job #581172) | Cod sursa (job #1493985) | Cod sursa (job #1679644) | Cod sursa (job #1651084) | Cod sursa (job #949072)
Cod sursa(job #949072)
#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 long p, n = INVALID_RESULT;
/*** READ AND WRITE FUNCTIONS ***/
void read()
{
f = fopen(INPUT_FILE, "rt");
fscanf(f, "%lld", &p);
fclose(f);
}
void write()
{
f = fopen(OUTPUT_FILE, "wt");
fprintf(f, "%lld", n);
fclose(f);
}
/*** SOLVING PROBLEM FUNCTIONS ***/
unsigned long long getZeros(unsigned long long value)
{
unsigned long long x;
unsigned long long answer = 0;
for (x = 5; x <= value; x *= 5)
answer += value / x;
return answer;
}
void solve()
{
if (p < 0 || p > 100000000)
return;
unsigned long long min = 1, max = 100000000;
unsigned long 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 ***/
int main()
{
read();
solve();
write();
return 0;
}