Cod sursa(job #3152504)

Utilizator andreitricaAndrei Trica andreitrica Data 25 septembrie 2023 13:20:16
Problema Factorial Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

int countTrailingZeros(int n) {
    int count = 0;
    while (n % 10 == 0) {
        count++;
        n /= 10;
    }
    return count;
}

int findSmallestN(int p) {
    int left = 1, right = p * 5;  // Pornim cu intervalul [1, 5*P] pentru că 5! are 1 zerou la final și oricare alt factorial mai mare va avea cel puțin un zero în plus.

    while (left < right) {
        int mid = (left + right) / 2;
        int zeros = 0;
        int temp = mid;

        while (temp > 0) {
            temp /= 5;
            zeros += temp;
        }

        if (zeros == p) {
            return mid;
        } else if (zeros < p) {
            left = mid + 1;
        } else {
            right = mid;
        }
    }

    return -1; // Dacă nu există un astfel de N
}

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

    int p;
    fin >> p;

    int result = findSmallestN(p);

    fout << result << endl;

    fin.close();
    fout.close();

    return 0;
}