Cod sursa(job #2834376)

Utilizator ciprian.morosanuCiprian Morosanu ciprian.morosanu Data 16 ianuarie 2022 21:40:10
Problema Factorial Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#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;
}