Cod sursa(job #1453595)

Utilizator Salomia_Adrian_325CCSalomia Adrian Salomia_Adrian_325CC Data 23 iunie 2015 22:21:22
Problema Factorial Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <stdlib.h>

long long nr_zerouri_sfarsit(long long x) {
	long long nr = 0;
	long long r = 5;
	while(r <= x) {
		nr += x/r;
		r *= 5;
	}
	return nr;
}

long long cautare_binara(long long a, long long b, long long p){
	if(a >= b)
		return -1;
	long long r = (a+b)/2;
	long long nr_z = nr_zerouri_sfarsit(r);
	if(p > nr_z)
		return cautare_binara(r+1, b, p);
	if(p < nr_z)
		return cautare_binara(a, r-1, p);
	r--;
	while(nr_zerouri_sfarsit(r) == nr_z) {
		r--;
	}
	return ++r;
}

int main() {
	FILE *f1 = fopen("fact.in", "r");
	FILE *f2 = fopen("fact.out", "w");

	long long p;
	fscanf(f1, "%lld", &p);
	if(p == 0) {
		fprintf(f2, "1\n");
		return 0;
	}

	long long n;
	n = cautare_binara(0, 100000000, p);

	fprintf(f2, "%lld\n", n);
	fclose(f1);
	fclose(f2);
	return 0;
}