Cod sursa(job #204213)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 22 august 2008 14:23:30
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

#define Nmax 155
#define Lmax 1024
#define BASE 1000000

int n;
int sol[Lmax],sol1[Lmax];

void citire()
{
	scanf("%d\n", &n);
}

void init(int H[], unsigned long X) {
  H[0] = 0;
    while (X) {
      ++H[0];   
      H[H[0]] = X % BASE;   
      X /= BASE;   
  }   
}
void mul2(int A[])
{
	int i, t;

	for (i = 1, t = 0; i <= A[0] || t; ++i, t /= BASE)
		A[i] = (t += 2 * A[i]) % BASE;
	A[0] = i - 1;
}

void mul(int A[],int B[])
{
	int i, t;

	for (i = 1, t = 0; i <= A[0] || i<=B[0]|| t; ++i, t /= BASE)
		A[i] = (t += B[i] * A[i]) % BASE;
	A[0] = i - 1;
}

void scrie(int A[])
{
	int i;

	printf("%d", A[A[0]]);
	for (i = A[0] - 1; i >= 1; --i)
		printf("%.6d", A[i]);
	printf("\n");
}

void solve()
{
	int i;

	init(sol1,n);
	sol[0] = sol[1] = 1;
	for (i = 1; i <= n*n; ++i)
		mul2(sol);
	mul(sol,sol1);
	scrie(sol);
}

int main()
{
	freopen("patrate2.in", "r", stdin);
	freopen("patrate2.out", "w", stdout);

	citire();
	solve();

	return 0;
}