Cod sursa(job #397211)

Utilizator gandruAlexandru Gheorghiu - UPB gandru Data 16 februarie 2010 17:34:16
Problema Factorial Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <math.h>

long calcSum(int v[100000], int k)
{
	int i;
	long s=0;
	for (i=1; i<=k; i++)
		s+=v[i]*i;
	return s;
}
int main()
{
	long p,nr=0;
	FILE *f,*g;
	int k=1,ok=1,ok2=0,i,puteri[100000]={0};
	
	f=fopen("fact.in","r");
	fscanf(f,"%li",&p);
	fclose(f);
	
	if (p<5) ok=0;

	while(ok)
		{
			puteri[1]++;
			if (calcSum(puteri,k)>=p) break;
			for (i=1; i<=k; i++)
				{
					if (puteri[i]%4==0 && puteri[i]!=4)
						puteri[i+1]++;
					if (puteri[i]==4)
						{ k++; puteri[k]++; }
					if (calcSum(puteri,k)>=p) 
						{ok2=1; break;}
				}
			if (ok2) break;
		}
	
	g=fopen("fact.out","w");
	if (ok)
		{
			if (calcSum(puteri,k)>p)
				{
					nr=-1;
				}
			else
			{
			for (i=1; i<=k; i++) 
				{
		 		  if (puteri[i]%4>0) nr+=pow(5,i)*(puteri[i]%4);
		 		  else nr+=pow(5,i)*4;
		  		}
			}
		}
	else nr=1;

	fprintf(g,"%li ",nr);
	fclose(g);
	return 0;
}