Cod sursa(job #480260)

Utilizator budulaiSuman Dinu budulai Data 27 august 2010 11:35:09
Problema Factorial Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 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 calc(int p)
{
	int rez = p*5; //aici da 50
	//rez2 = rez;
	//nr = p;
	int i=25;
	//count = 0;
	//z=1;
	while(rez>=i) //p>=25 si nui mai mare ca 123
	{
		//nr += z;
		//rez -= 5;
		//z++;
//		nr += (rez/i);
		rez -= (rez-(rez/i)*5)/i*5;
		//printf("rez2: %d", (rez/i));
		i=i*5;
		//count++;
		//rez+=5;
	}
	return rez;
}

int main()
{
//	float l = log10(125.0)/log10(5.0);
//	printf("%f", floor(l));
//	return 0;
	FILE *fin;
	//bool good=true;
	int p=0, rez;
//	float log5=log10(5.0), x ;
	//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

	/*
	printf("count: %d\n",count);
	for(i=rez;i>rez-count*5;i-=5)
	{
		z=i;
		while(z%5==0 && z!=1) z/=5;
		if(z==1) {good = false; break;}
		//if putere a lui 5
	}
	if(!good) printf("bad");
	*/
	//while(nr>p)
	//{
	//	//x = log10((float)rez)/log5;
	//	//nr -= floor(x);
	//	z=rez;
	//	while(z%5==0)
	//	{
	//		nr--;
	//		z/=5;
	//	}
	//	rez-=5;
	//}
	if((rez = calc(p)) == calc(p+1)) write(-1);
	else write(rez);
	//else printf(" rez: %d\n",rez);
	/*if(nr==p) write(rez); else write(-1);*/

	//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;
}