Cod sursa(job #525053)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 23 ianuarie 2011 23:39:35
Problema Factorial Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
//Zeroes(N!) = N / 5 + N / 25 + N / 125 + ... + N / 5^k, until a division becomes 0
#include <iostream>
#include <cstdio>
#include <limits>
using namespace std;

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

long mij1 = -1, P;

int calcZeros(long num)
{
    int rez = 0;
    while (num)
    {
        rez += num / 5;
        num /= 5;
    }
    return rez;
}

void bs(long li, long ls)
{
	while(li <= ls)
	{
		long mij = (li + ls)>>1;
		mij=mij-mij%5;
		int nrz = calcZeros(mij);
		if(nrz > P)
			ls = mij - 1;
		else
			if(nrz < P)
				li = mij + 1;
		if(nrz == P)
		{
			fprintf(g, "%ld", mij);
			return;
		}
	}
	fprintf(g, "-1\n");
	return;
}
int main(void)
{
	fscanf(f, "%ld", &P);
	bs(0, 5*P);
	
	fclose(f);
	fclose(g);
	return 0;
}