Cod sursa(job #2429500)

Utilizator MihaIonescuMihai Ionescu MihaIonescu Data 9 iunie 2019 20:21:03
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
using namespace std;

ifstream f ("fact.in");
ofstream g ("fact.out");

int largestPower (int n, int &powCnt, int &pow)
{
    powCnt = 0;
    pow = 5;
    while (pow <= n)
        pow *= 5, powCnt++;
    return powCnt;
}   /// powCnt = cel mai mare exponent al lui 5
    /// pow = cea mai mare putere a lui 5       mai mici decat n

int cntZeros (int n)
{
    int pow = 5;
    int cntZero = 0;
    while (pow <= n)
    {
        cntZero += (n/pow);
        pow *= 5;
    }
    return cntZero;
}

int rezPreliminar (int n)
{
    int powCnt, pow;
    largestPower (n, powCnt, pow);
    int x = ( 4 * n ) / (1-1/pow);  //formula dem. in formule.txt
    return x;
}

int main ()
{
    int n, rez;
    f>>n;
    if (n==0) g<<1;

    else
    {
        rez = rezPreliminar(n);
        rez = rez + 5 - rez%5; ///cel mai mic multiplu de 5 mai mare decat rez
        int cnt = cntZeros(rez);

        if (cnt == n)
            g<<rez;

        else if (cnt < n)
        {
            while (cnt < n)
            {
                rez+=5;
                cnt = cntZeros(rez);
            }

            if (cnt == n) g<<rez;
            else g<<-1;
        }

        else
        {
            while (cnt > n)
            {
                rez-=5;
                cnt = cntZeros(rez);
            }

            if (cnt == n) g<<rez;
            else g<<-1;
        }
    }
    g<<'\n';
    g<<cntZeros(rez);
        return 0;
}