Pagini recente » Cod sursa (job #2649153) | Cod sursa (job #1581427) | Cod sursa (job #1644710) | Cod sursa (job #1763859) | Cod sursa (job #66083)
Cod sursa(job #66083)
#include <stdio.h>
#include <string.h>
#define NMAX 100000
int fact[2][NMAX];
int doi[NMAX*2];
int n;
void mulf(int b, int crt, int last)
{
int i, t;
for(i = 1, t = 0; i <= fact[last][0] || t; ++i, t /= 10)
fact[crt][i] = (t += fact[last][i]*b) % 10;
fact[crt][0] = i-1;
}
void do_fact()
{
int i, k = 0;
fact[k][0] = fact[k][1] = 1;
for(i = 2; i <= n; ++i, k = 1-k)
{
mulf(i, 1-k, k);
}
}
void mulp()
{
int i, t;
for(i = 1, t = 0; i <= doi[0] || t; ++i, t /= 10)
doi[i] = (t += doi[i]*2) % 10;
doi[0] = i-1;
}
void pow()
{
int i, until = n*n;
doi[0] = doi[1] = 1;
for(i = 1; i <= until; ++i)
mulp();
}
void mul()
{
int i, j, t;
int c[NMAX*2];
int crt = n%2;
memset(c, 0, sizeof(c));
for(i = 1; i <= doi[0]; ++i)
{
for(t = 0, j = 1; j <= fact[crt][0] || t; ++j, t /= 10)
c[i+j-1] = (t += c[i+j-1] + doi[i]*fact[crt][j]) % 10;
if(c[0] < i+j-1)
c[0] = i+j-1;
}
for(; c[0] > 0; --c[0])
printf("%d", c[i]);
printf("\n");
}
int main()
{
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
scanf("%d", &n);
do_fact();
pow();
mul();
fclose(stdin);
fclose(stdout);
return 0;
}