Pagini recente » Istoria paginii utilizator/bogdanescu | Cod sursa (job #1453599)
#include <stdio.h>
#include <stdlib.h>
long long nr_zerouri_sfarsit(long long x) {
long long nr = 0;
long long r = 5;
while(r <= x) {
nr += x/r;
r *= 5;
}
return nr;
}
long long cautare_binara(long long a, long long b, long long p){
if(a >= b)
return -1;
long long r = (a+b)/2;
long long nr_z = nr_zerouri_sfarsit(r);
if(p > nr_z)
return cautare_binara(r+1, b, p);
if(p < nr_z)
return cautare_binara(a, r-1, p);
r--;
while(nr_zerouri_sfarsit(r) == nr_z) {
r--;
}
return ++r;
}
int main() {
FILE *f1 = fopen("fact.in", "r");
FILE *f2 = fopen("fact.out", "w");
long long p;
fscanf(f1, "%lld", &p);
if(p == 0) {
fprintf(f2, "1\n");
return 0;
}
long long n;
n = cautare_binara(0, 10000000000, p);
fprintf(f2, "%lld\n", n);
fclose(f1);
fclose(f2);
return 0;
}