Cod sursa(job #1965089)

Utilizator matystroiaStroia Matei matystroia Data 13 aprilie 2017 22:28:09
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("fact.in");
ofstream fout("fact.out");

int p;
vector<pair<int,int>> puteri;

int zero(int x)
{
    int ret=0;
    for(auto it=puteri.rbegin();it!=puteri.rend();++it)
    {
        int putere=it->first, zerouri=it->second;
        if(p>=zerouri)
            ret+=(p/zerouri)*putere, p%=zerouri;
    }
    return ret;
}

int zero2(int x)
{
    int ret=0;
    for(auto it=puteri.rbegin();it!=puteri.rend();++it)
    {
        int putere=it->first, zerouri=it->second;
        while(x>=putere)
            x-=putere, ret+=zerouri;
    }
    return ret;
}

int main()
{
    fin>>p;
    int aux=p;

    if(p==0)
    {
        fout<<1;
        return 0;
    }

    int x=1, z=0;
    for(int i=0;i<13;++i)
    {
        z+=x, x*=5;
        puteri.push_back(make_pair(x, z));
    }

    int ans=zero(p);
    if(zero2(ans)!=aux)
        fout<<-1;
    else
        fout<<ans;

    return 0;
}