Cod sursa(job #2851697)

Utilizator alexandru.ciorneiAlexandru-Stefan Ciornei alexandru.ciornei Data 19 februarie 2022 00:33:22
Problema Factorial Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
 
using namespace std;

#define NRMAXZERO 100000000

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] = {0};
    int zerouri[15] = {0};
    unsigned long long int x = 1;
    int cnt = 0;
    while (true) {
        put[cnt] = x;
        zerouri[cnt] = nrzerofact(x);
        cnt++;
        if (zerouri[cnt - 1] > NRMAXZERO)
            break;
        x *= 5;
    }

    int i = cnt - 1;
    while (zerouri[i] > p)
        i--;
    unsigned long long int n = put[i];
    int nrzero = zerouri[i];
    int dif = p - nrzero;
    while (i && dif) {
        dif = p - nrzero;
        i = cnt - 1;
        while (zerouri[i] > dif && i)
            i--;
        n += put[i];
        nrzero += zerouri[i];
    }
 
    if (nrzerofact(n) == p)
        fout << n;
    else
        fout << -1;
    return 0;
}