Cod sursa(job #630215)

Utilizator silviuboganSilviu Bogan silviubogan Data 4 noiembrie 2011 22:15:05
Problema Factorial Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
using namespace std;

inline int zerosAtEndOfFact (long int x) {
    int s = 0, pow5 = 5;
    while (x > pow5) {
        s += x / pow5;
        pow5 *= 5;
    }
    return s;
}

int main () {
    unsigned int P, N = 0;

    freopen("fact.in", "r", stdin);
    freopen("fact.out", "w", stdout);

    scanf("%d", &P);
    if (P == 0) {
        printf("1");
        return 0;
    }

    int upperLimit = 100000000, i = 1;
    unsigned int k, zeros;
    while (i <= upperLimit) {
        k = (i + upperLimit) / 2;
        zeros = zerosAtEndOfFact(k);
        if (zeros == P) {
            N = k;
            break;
        } else if (zeros < P) {
            i = k + 1;
        } else {
            upperLimit = k - 1;
        }
    }
    N -= N % 5;

    if (N) {
        printf("%d", N);
    } else {
        printf("-1");
    }

    return 0;
}