Cod sursa(job #472131)

Utilizator marius.bucurBucur Marius - Ovidiu marius.bucur Data 22 iulie 2010 23:48:35
Problema Factorial Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>

int z_i_f(int N)
{
	int result = 0;
	while(N != 0)
	{
		result += N/5;
		N /= 5;
	}
	return result;
}

int main()
{
	FILE* f = fopen("fact.in", "r");
	unsigned long long int p;
	fscanf(f, "%llu", &p);
	if(p == 0)
	{
		f = fopen("fact.out", "w");
		fprintf(f, "%d\n", 1);
		fclose(f);
		return 0;
	}
	int N = 0;
	int l = 0;
	int r = p * 10;
	while(l < r)
	{
		int m = l + (r-l)/2;
		int z = z_i_f(m);
		//printf("[m %d z %d l %d r %d p %d]\n", m, z, l, r, p);
		if(z == p)
		{
			while(z_i_f(m) == p)
			{
				N = m;
				m--;
			}
			break;
		}
		else if(z > p)
		{
			r = m;
		}
		else
		{
			l = m + 1;
		}
	}
	fclose(f);
	f = fopen("fact.out", "w");
	fprintf(f, "%d", N == 0?-1:N);
	fclose(f);
	return 0;
}