Cod sursa(job #949036)

Utilizator MathPlayerPopescu Bogdan Constantin MathPlayer Data 12 mai 2013 10:41:49
Problema Factorial Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>

#define INPUT_FILE	"fact.in"
#define OUTPUT_FILE	"fact.out"
#define TRUE		1
#define FALSE		0

int main()
{
	unsigned long p, actual, n;
	unsigned int i, crt, order_change;
	unsigned int powers[20] = {0};
	FILE *f;

	/* read p */
	f = fopen(INPUT_FILE, "rt");
	fscanf(f, "%ld", &p);
	fclose(f);

	/* calculate n */
	actual = 0;
	crt = 0;
	n = 0;
	while (actual < p) {
		n += 5;
	//	printf("n = %d\n", n);
		order_change = FALSE;

		/* get crt for this n */
		powers[crt]++;
		while (powers[crt] == 5) {
			order_change = TRUE;
			crt++;
			powers[crt]++;
		}

		actual += crt + 1;

		/* restore crt for next */
		if (order_change == TRUE) {
			for (i = 0; i < crt; i++)
				powers[i] = 0;
			crt = 0;
		}

	};

	if (actual > p) {
		n = -1;
	}

	if (n == 0) {
		n = 1;
	}

	/* write n */
	f = fopen(OUTPUT_FILE, "wt");
	fprintf(f, "%ld", n);
	fclose(f);

	return 0;
}