Cod sursa(job #2851698)

Utilizator alexandru.ciorneiAlexandru-Stefan Ciornei alexandru.ciornei Data 19 februarie 2022 00:49:58
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
 
using namespace std;
 
int nrzerofact(unsigned long long int n) {
    unsigned long long int p = 5;
    int nrzero = 0;
    while (n) {
        nrzero += n / p;
        n /= p;
    }
    return nrzero;
}
 
int main() {
    ifstream fin("fact.in");
    ofstream fout("fact.out");
 
    int p = 0;
    fin >> p;
 
    unsigned long long int put[15];
    int zerouri[15];
    unsigned long long int x = 1;
    int cnt = 0;
    while (true) {
        put[cnt] = x;
        zerouri[cnt] = nrzerofact(x);
        cnt++;
        if (nrzerofact(x) > 100000000)
            break;
        x *= 5;
    }
 
    int i = cnt - 1;
    while (true) {
        if (zerouri[i] <= p)
            break;
        i--;
    }
    unsigned long long int n = put[i];
    int nrzero = zerouri[i];
    while (i) {
        int dif = p - nrzero;
        i = cnt - 1;
        while (zerouri[i] > dif && zerouri[i])
            i--;
        if (!i)
            break;
 
        n += put[i];
        nrzero += zerouri[i];
    }
 
    if (nrzerofact(n) == p)
        fout << n;
    else
        fout << -1;
    return 0;
}