Pagini recente » Cod sursa (job #2121700) | Cod sursa (job #3220335) | Cod sursa (job #2031607) | Cod sursa (job #1183127) | Cod sursa (job #2278551)
#include <stdio.h>
#include <stdlib.h>
long long int cautare(unsigned long long, unsigned long long, unsigned long long);
unsigned long long zero_number(unsigned long long);
int main() {
FILE *f, *g;
f = fopen("fact.in", "r");
g = fopen("fact.out", "w");
unsigned long long p;
fscanf(f, "%llu", &p);
unsigned long long dr = 18446744073709551614;
unsigned long long st = 1;
fprintf (g, "%lld", cautare(st, dr, p) );
return 0;
}
long long int cautare(unsigned long long st, unsigned long long dr, unsigned long long p) {
if (st > dr) {return -1;}
if (st == dr) {
if (zero_number(st) == p) {
return st;
} else { return -1; }
}
else {
unsigned long long mij = st + (dr - st) / 2;
if ( zero_number(mij) >= p ) {
return cautare(st, mij, p);
} else {
return cautare(mij + 1, dr, p);
}
}
}
unsigned long long zero_number(unsigned long long x) {
unsigned long long v_current = 5;
unsigned long long answer = 0;
while (x >= v_current) {
answer = answer + x / v_current;
v_current = 5 * v_current;
}
return answer;
}