Cod sursa(job #480246)

Utilizator budulaiSuman Dinu budulai Data 27 august 2010 01:57:03
Problema Factorial Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
using namespace::std;

int write(int nr)
{
	FILE *fout;
	fout = fopen("fact.out","w");
	fprintf(fout,"%d",nr);
	fclose(fout);
	return 0;
}

int main()
{
	FILE *fin;
	bool good=true;
	int p=0, count, n, total=0, nr, i, rez,z ;
	//long long int n;

	fin = fopen("fact.in", "r");
	fscanf(fin,"%d", &p);
	fclose(fin);

	if(p==0) 
	{
		write(1);
		return 0;
	}

	//ex p = 10 => rez trebuie sa fie 45
	rez = p*5; //aici da 50
	nr = p;
	i=5;
	//z=1;
	while(rez>=i*5) //p>=25 si nui mai mare ca 123
	{
		//nr += z;
		//rez -= 5;
		//z++;
		nr += rez/(i*5);
		i=i*5;

		//rez+=5;
	}
	while(nr>p)
	{
		z=rez;
		while(z%5==0)
		{
			nr--;
			z/=5;
		}
		rez-=5;
	}
	if(nr==p) write(rez); else write(-1);
	//printf("nr: %d, p: %d, rez: %d\n", nr, p, rez);

	//printf("z: %d",z);
	//if(i>1) 
	//{
	//	i/=5;
	//	if (p==i*5) good = false;
	//}

	//if(good) write(rez); else write(-1);
	//acum avem nr=11 il scadem pina la p
	//i=p;
	//while(nr>p)
	//{
	//	z=i;
	//	nr--;
	//	rez -= 5;//??
	//	
	//	while(z%5 ==0)
	//	{
	//		nr--;
	//		z/=5;
	//	}
	//	i--;
	//}

	//printf("nr: %d, p: %d, rez: %d", nr, p, rez);
//	if(nr==p) write(rez); 
//	if(nr!=p) write(-1); 



	//while(total<p)
	//{
	//	count=1;
	//	nr=i;
	//	while(nr%5 == 0)
	//	{
	//		count++;
	//		nr /= 5;
	//	};
	//	total += count;

	//	i++;
	//}
	//	if(total==p) write(5*(i-1)); 
	//	if(total>p) write(-1); 

	return 0;
}