Cod sursa(job #1482056)

Utilizator raulvasileRaul Vasile raulvasile Data 5 septembrie 2015 21:59:57
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
/* Author: Raul Vasile
 * Mail: [email protected]
 */

#include <stdio.h>

int zeroFact (int zeros) {
    int s = 0;

    while (zeros != 0) {
       s += zeros / 5;
       zeros /= 5;
    }

    return s;
}

// Rezolvare problema
int solve (int zeros) {
    int number = 0, right = 0, left = 0, middle;
    
    if (zeros == 0) {
        return 1;
    }
    
    right = 5 * zeros + 1;

    while (left < right) {
        middle = (left + right) / 2;
    
        int number = zeroFact (middle);

        if (number < zeros) {
            left = middle + 1;
        } else {
            if (number > zeros) {
                right = middle - 1;
            } else {
                while (middle % 5) {
                    middle--;
                }

                return middle;
            }
        }
    }

    return -1;
}

int main(int argc, char* argv[]) {
    // Declarare variable
    int zeros;

    // Declarare fisiere
    FILE *input, *output;

    // Deschidere fisiere
    input = fopen("fact.in", "r");
    output = fopen("fact.out", "w");

    // Verificare fisiere
    if (input == NULL || output == NULL) {
        printf("Error opening files");
        
        return 0;
    } else {
        fscanf(input, "%d", &zeros);

        fprintf(output, "%d\n", solve(zeros));
    }

    return 0;
}