Pagini recente » Cod sursa (job #2909152) | Cod sursa (job #2341275) | Cod sursa (job #410295) | Cod sursa (job #224677) | Cod sursa (job #1886267)
#include <stdio.h>
#define MAX_NUMBER 4500000015
#define MIN_NUMBER 0
long normalizeToFive(long number) {
while (number % 5 != 0)
number--;
return number;
}
long factorialLeadingZeroesOf(long number) {
long sum = 0;
while (number >= 1) {
sum += number / 5;
number /= 5;
}
return sum;
}
long factorialZeroes(long zeroes) {
long st = MIN_NUMBER, dr = MAX_NUMBER;
while (st < dr) {
long aux = (dr - st) / 3;
long m1 = st + aux;
long m1_zeroes = factorialLeadingZeroesOf(m1);
if (m1_zeroes == zeroes)
return normalizeToFive(m1);
long m2 = dr - aux;
long m2_zeroes = factorialLeadingZeroesOf(m2);
if (m2_zeroes == zeroes)
return normalizeToFive(m2);
else if (m1_zeroes < zeroes && m2_zeroes < zeroes)
st = m2 + 1;
else if (m1_zeroes < zeroes && m2_zeroes > zeroes) {
st = m1 + 1;
dr = m2 - 1;
} else
dr = m1 - 1;
}
return -1;
}
int main() {
long p;
char *inputFileName = "fact.in", *outputFileName = "fact.out";
FILE *in = fopen(inputFileName, "r");
if (in == NULL) {
printf("Can't open input file with name \"%s\".\n", inputFileName);
return -1;
}
fscanf(in, "%ld", &p);
fclose(in);
FILE *out = fopen(outputFileName, "w");
if (out == NULL) {
printf("Can't create file with name \"%s\".\n", outputFileName);
}
fprintf(out, "%ld\n", factorialZeroes(p));
fclose(out);
return 0;
}