Pagini recente » Cod sursa (job #508283) | Cod sursa (job #2332755) | Cod sursa (job #450922) | Cod sursa (job #865816) | Cod sursa (job #480405)
Cod sursa(job #480405)
#include <stdio.h>
using namespace std;
#define MAX 10000
int fact[MAX], put[MAX];
int n, i, j, k;
void inmultire_nr_mic (int nr[], int x)
{
int t;
for (i=1; i<=nr[0] || t; ++i)
{
t /= 10;
t += (nr[i] * (x % 10));
nr[i] = t % 10;
}
if (i - 2 > nr[0])
nr[0] = i - 2;
}
void afisare (int nr[])
{
FILE *g = fopen ("patrate2.out","w");
for (i=nr[0]; i>=1; --i)
fprintf (g, "%d", nr[i]);
fprintf (g, "\n");
fclose (g);
}
void initializare (int nr[])
{
for (i=0; i<MAX; ++i)
nr[i] = 0;
}
void inmultire (int nr1[], int nr2[])
{
int prod[MAX], t = 0;
initializare (prod);
for (i=1; i<=nr1[0]; ++i)
{
t = 0;
for (j=1; j<=nr2[0] || t; ++j)
{
t /= 10;
t += (prod[i+j-1] + nr1[i] * nr2[j]);
prod[i+j-1] = t % 10;
}
if (i + j - 3 > prod[0])
prod[0] = i + j - 3;
}
for (i=prod[0]; i>=0; --i)
nr1[i] = prod[i];
}
int main ()
{
FILE *f = fopen ("patrate2.in","r");
fscanf (f,"%d", &n);
put[0] = 1;
put[1] = 2;
for (k=1; k<n*n; ++k)
inmultire_nr_mic (put, 2);
//afisare (put);
fact[0] = fact[1] = 1;
for (k=1; k<=n; ++k)
inmultire_nr_mic (fact, k);
//afisare (fact);
inmultire (put, fact);
afisare (put);
fclose (f);
return 0;
}