Cod sursa(job #2081719)

Utilizator karakter98Irimia Robert karakter98 Data 5 decembrie 2017 00:52:05
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <cmath>
#include <climits>
using namespace std;

FILE* fin;
FILE* fout;

unsigned long long P;
unsigned long long high, low, mid, n;

unsigned long long getZeroNr(unsigned long long n)
{
    unsigned long long retval = 0;
    for(unsigned long long i = 5; i <= n; i *= 5)
        retval += n / i;
    return retval;
}

int main()
{
    fin = fopen("fact.in", "r");
    fout = fopen("fact.out", "w");
    fscanf(fin, "%llu", &P);

    low = 1;
    high = ULLONG_MAX - 1;

    if(P == 0)
    {
        fprintf(fout, "1");
        return 0;
    }

    while(low != high)
    {
        mid = (low + high) / 2;
        if(getZeroNr(mid) == P)
            {
                n = mid;
                break;
            }
        if(getZeroNr(mid) < P)
            low = mid + 1;
        else high = mid;
        printf("Low: %llu, High: %llu\n", low, high);
    }

    if(n != 0)
        fprintf(fout, "%llu", n - n % 5);
    else fprintf(fout, "-1");

    return 0;
}