Cod sursa(job #1415739)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 5 aprilie 2015 23:40:05
Problema Factorial Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define inFile "fact.in"
#define outFile "fact.out"

long long getPow(int power, long long X) {
    long long currPow = power;
    long long nPow = 0;

    for(; currPow <= X; currPow *= power)
        nPow += X / currPow;

    return nPow;
}

int main() {
    FILE *in = fopen(inFile, "r");
    FILE *out = fopen(outFile, "w");

    int P, i;
    long long sBeg, sMid, sEnd, lastFound, pow2, pow5, nZero;

    fscanf(in, "%d", &P);
    sBeg = 1;
    sEnd = 1ll << 60;
    lastFound = -1;

    while(sBeg <= sEnd) {
        sMid = (sBeg + sEnd) >> 1;

        pow2 = getPow(2, sMid);
        pow5 = getPow(5, sMid);
        nZero = min(pow2, pow5);

        if(nZero < P) sBeg = sMid + 1;
        else if(nZero > P) sEnd = sMid - 1;
        else sEnd = sMid - 1, lastFound = sMid;
    }

    fprintf(out, "%d\n", lastFound);

    fclose(in);
    fclose(out);

    return 0;
}