Cod sursa(job #807053)

Utilizator nautilusCohal Alexandru nautilus Data 3 noiembrie 2012 23:27:47
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
// 2^(n^2) * n!
// calculez 2^(n^2) prin inmultiri succesive cu 2^3

#include<fstream>
using namespace std;
#define DIMMAX 10010

int n;
int sol[DIMMAX], lgsol;

void read()
{
	ifstream fin("patrate2.in");

	fin >> n;

	fin.close();
}

void inmultireMic(int a[], int &lga, int nr)
{
	int i, cifra, t = 0;

	//parcurgem si inmultim
	for (i=0; i<lga; ++i)
	{
		cifra = a[i] * nr + t;
		t = cifra / 10;
		a[i] = cifra % 10;
	}

	//daca mai avem transport, il adaugam la rezultat
	while (t != 0)
	{
		a[lga++] = t % 10;
		t = t / 10;
	}
}

void solve()
{
	int i;

	sol[0] = 1; lgsol = 1;

	for (i=1; i<=n*n/3; ++i)
		inmultireMic(sol, lgsol, 8);
	for (i=1; i<=n*n % 3; ++i)
		inmultireMic(sol, lgsol, 2);

	for (i=2; i<=n; ++i)
		inmultireMic(sol, lgsol, i);
}

void write()
{
	int i;

	ofstream fout("patrate2.out");

	for (i=lgsol-1; i>=0; --i)
		fout<<sol[i];

	fout<<'\n';

	fout.close();
}

int main()
{
	read();
	solve();
	write();

	return 0;
}