Cod sursa(job #1831356)

Utilizator NarniussAnghelache Bogdan Narniuss Data 17 decembrie 2016 21:33:44
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
#define dr 1000000000

long long p;
long long int nr_zero_fact(long long int p)
{
    long long s = 0, five = 5;

    while(p/five > 0)
    {
        s += p/five;
        five *= 5;
    }

    return s;
}

long long bin_search(long long left, long long right)
{
    if(left < right){
        long long mid, nr0;
        mid = left + (right - left)/2;
        nr0 = nr_zero_fact(mid);
        if(nr0 == p) return mid;
        else if( nr0 > p){
            return bin_search(left, mid - 1);
        }
        else{
            return bin_search(mid + 1, right);
        }
    }
    return 0;
}
int main()
{
    FILE *fin, *fout;
    fin = fopen("fact.in", "r");
    fout = fopen("fact.out", "w");
    fscanf(fin, "%d", &p );

    if(p == 0){
        fprintf(fout, "1\n");
        return 0;
    }
    long long n;
    n = bin_search(0, dr);
    if(n == 0){
        fprintf(fout, "-1\n");
        return 0;
    }

    while(nr_zero_fact(n) == p){
        n--;
    }
    n+=1;

    fprintf(fout, "%d\n", n);

    fclose(fin);
    fclose(fout);
    return 0;
}