Cod sursa(job #2984979)

Utilizator MesterelMester Darius Mesterel Data 25 februarie 2023 13:16:32
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
using namespace std;

long long calc0(int nr){
    long long sum=0;
    nr/=5;
    while (nr){
        sum+=nr;
        nr/=5;
    }
    return sum;
}

int main(){
    ifstream fin("fact.in");
    ofstream fout("fact.out");
    int n;
    fin>>n;
    if (n==0){
        fout<<1;
        return 0;
    }
    unsigned long long nr=1,sum=0;
    while (sum<=n){ // <= in puii mei...ca la pow de 5 nu ar merge
        nr*=5;
        sum+=nr/5;
    }
    nr/=5;
    sum-=nr;
    unsigned long long st=nr, dr=nr*5, mij, poz=0, rez;
    while (st<dr){
        mij=(st+dr)/2;
        //cout<<mij<<' '<<poz<<'\n';
        rez=calc0(mij-nr)+sum;
        //cout<<rez;
        if (rez==n)
            poz=mij;
        if (rez<=n)
            st=mij+1;
        else dr=mij-1;
    }
    if (poz==0)
        fout<<-1;
    else fout<<poz-poz%5;
}