Pagini recente » Cod sursa (job #1032967) | Cod sursa (job #881153) | Cod sursa (job #1648615) | Cod sursa (job #1188498) | Cod sursa (job #2834376)
#include <stdio.h>
int compute(int k) {
int sum = 0;
int pow5 = 1;
while (1) {
int temp = k / pow5;
sum += temp;
if (temp == 0) {
return sum;
}
pow5 *= 5;
}
}
int countOnes(int left, int right, int desired) {
if (left > right) {
return -1;
}
int mid = (left + right) / 2;
int value = compute(mid);
if (value == desired) {
return mid;
} else if (desired > value) {
return countOnes(mid + 1, right, desired);
} else {
return countOnes(left, mid - 1, desired);
}
}
int main() {
char *inFileName = "fact.in";
char *outFileName = "fact.out";
FILE *in = fopen(inFileName, "r");
if (in == NULL) {
printf("Cannot open %s.\n", inFileName);
return 1;
}
FILE *out = fopen(outFileName, "w");
int p;
fscanf(in, "%d", &p);
if (p == 0) {
fprintf(out, "%d", 1);
} else {
int value = countOnes(1, p, p);
if (value != -1) {
value *= 5;
}
fprintf(out, "%d", value);
}
fclose(in);
fclose(out);
return 0;
}