Cod sursa(job #2278551)

Utilizator mihaicivMihai Vlad mihaiciv Data 8 noiembrie 2018 10:45:13
Problema Factorial Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>

long long int cautare(unsigned long long, unsigned long long, unsigned long long);
unsigned long long zero_number(unsigned long long);

int main() {

    FILE *f, *g;
    f = fopen("fact.in", "r");
    g = fopen("fact.out", "w");

    unsigned long long p;
    fscanf(f, "%llu", &p);

    unsigned long long dr = 18446744073709551614;
    unsigned long long st = 1;
    fprintf (g, "%lld", cautare(st, dr, p) );

    return 0;
}

long long int cautare(unsigned long long st, unsigned long long dr, unsigned long long p) {
    if (st > dr) {return -1;}
    if (st == dr) {
        if (zero_number(st) == p) {
            return st;
        } else { return -1; }
    }
    else {
        unsigned long long mij = st + (dr - st) / 2;
        if ( zero_number(mij) >= p ) {
            return cautare(st, mij, p);
        } else {
            return cautare(mij + 1, dr, p);
        }
    }
}

unsigned long long zero_number(unsigned long long x) {
    unsigned long long v_current = 5;
    unsigned long long answer = 0;
    while (x >= v_current) {
        answer = answer + x / v_current;
        v_current = 5 * v_current;
    }
    return answer;
}