Cod sursa(job #2707964)

Utilizator SerbaP123Popescu Serban SerbaP123 Data 18 februarie 2021 07:52:31
Problema Factorial Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#define DIM (int) 1e4
using namespace std;

long long n, st, dr, min_fact = (int) 2e9, poz = DIM - 1, mij;
char buff[DIM];

void read(long long &nr){
    nr = 0;
    while(!('0' <= buff[poz] && buff[poz] <= '9')){
        if(++poz == DIM) fread(buff, 1, DIM, stdin), poz = 0;
    }
    while(('0' <= buff[poz] && buff[poz] <= '9')){
        nr = nr * 10 + buff[poz] - '0';
        if(++poz == DIM) fread(buff, 1, DIM, stdin), poz = 0;
    }
}

long long nr_0(long long n){
    long long p = 5, ans = 0;
    while(p <= n){
        ans += n / p;
        p *= 5;
    }
    return ans;
}

int main(){
    freopen("fact.in", "r", stdin);
    freopen("fact.out", "w", stdout);
    read(n);
    st = 1, dr = (int) 2e11;
    if(!n){
        printf("%d", 1);
    }
    while(st <= dr){
        mij = (st + dr) / 2;
        if(nr_0(mij) == n){
            if(mij < min_fact){
                min_fact = mij;
            }
            dr = mij - 1;
        }
        else if(nr_0(mij) > n){
            dr = mij - 1;
        }
        else{
            st = mij + 1;
        }
    }
    if(min_fact < (int) 2e9){
        printf("%d", min_fact);
    }
    else{
        printf("%d", -1);
    }
    return 0;
}