Cod sursa(job #949067)

Utilizator MathPlayerPopescu Bogdan Constantin MathPlayer Data 12 mai 2013 13:43:45
Problema Factorial Scor 10
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;
		order_change = FALSE;

		/* get crt for this n */
		powers[crt]++;
		if (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);

	printf("p = %8ld, n = %8ld\n", p, n);
	return 0;
}