Cod sursa(job #2173105)

Utilizator 24601Dan Ban 24601 Data 15 martie 2018 20:34:08
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>
#include <limits.h>

int main(void)
{
    unsigned s, mid, pos, r, n;

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

    scanf("%u", &n);

    if (n == 0) {
        puts("1");
        return 0;
    }

    for (mid = pos = (unsigned) INT_MAX+1; mid; mid >>= 1) {
        r = 0;
        s = 1;
        do {
            s *= 5;
            r += (pos - mid) / s;
        } while ((pos - mid) / s > 0);

        if (r >= n) {
            pos -= mid;
        }
    }

    r = 0;
    s = 1;
    do {
        s *= 5;
        r += pos / s;
    } while (pos / s > 0);

    if (r == n) {
        printf("%u", pos);
    } else {
        puts("-1");
    }

    return 0;
}