Cod sursa(job #797035)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 13 octombrie 2012 10:57:21
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb

#include <cstdio>

const int MAX_SIZE(1000000);
const int BASE(1000000);
const int DIGITS(6);

int n;
int number [MAX_SIZE];

inline void read (void)
{
	std::freopen("patrate2.in","r",stdin);
	std::scanf("%d",&n);
	std::fclose(stdout);
}

inline void print (void)
{
	std::freopen("patrate2.out","w",stdout);
	std::printf("%d",number[*number]);
	int x, digits(0);
	for (int *iterator(number + *number - 1) ; iterator > number ; --iterator)
	{
		x = *iterator;
		while (x)
		{
			x /= 10;
			++digits;
		}
		digits = DIGITS - digits;
		while (digits)
		{
			std::putchar('0');
			--digits;
		}
		if (*iterator)
			std::printf("%d",*iterator);
	}
	std::putchar('\n');
	std::fclose(stdout);
}

inline void mul (int a [ ], int b)
{
	int index(1), reminder(0);
	for (int size(*a) ; index <= size || reminder ; ++index, reminder /= BASE)
		a[index] = (reminder += a[index] * b) % BASE;
	*a = index - 1;
}

inline void compute (void)
{
	*number = number[1] = 1;
	for (int factor(2) ; factor <= n ; ++factor)
		mul(number,factor);
	n *= n;
	for (int factor(1) ; factor <= n ; ++factor)
		mul(number,2);
}

int main (void)
{
	read();
	compute();
	print();
	return 0;
}