Pagini recente » Cod sursa (job #1987551) | Cod sursa (job #1724158) | Cod sursa (job #1570612) | Cod sursa (job #1787879) | Cod sursa (job #21369)
Cod sursa(job #21369)
//80 de puncte
#include <stdio.h>
#include <mem.h>
//using namespace std;
#define in "patrate2.in"
#define out "patrate2.out"
#define NMAX 101
int a[5001], b[5001], doi[5001];
int n, desc[101], ind;//maxim 17-18 cifre poate sa aiba
void Prod( int a[], int val );
void mul(int A[], int B[]);
void Conversie(int x, int b );
void Prod( int a[], int val )
{
int i, t = 0;
for ( i = 1; i <= a[0] || t; i++, t /= 10 )
{
a[i] = ( t += a[i] * val ) % 10;
}
a[0] = i - 1;
}
void mul(int A[], int B[])
{
int i, j, t, C[10001];
for ( i = 0;i < 10001; ++i )
C[i] = 0;
for (i = 1; i <= A[0]; i++)
{
for (t=0, j=1; j <= B[0] || t; j++, t/=10)
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
if (i + j - 2 > C[0]) C[0] = i + j - 2;
}
for ( i = 0; i <= C[0]; ++i )
{
A[i] = C[i];
}
}
int main()
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
int i;
scanf( "%d", &n );
Conversie( n*n, 2 );
a[0] = 1;
a[1] = 1;
doi[0] = 1;
doi[1] = 2;
for ( i = ind; i >= 1; --i )
{
if ( desc[i] == 1)
{
mul( a, doi );
}
mul( doi, doi );
}
b[0] = 1;
b[1] = 1;
for ( i = 1; i <= n; ++i )
{
Prod( b, i );
}
//sirul b retine n!
mul( a, b );
//INCA NU
/*for ( i = 1; i <= ind; ++i )
printf( "%d", desc[i] );
printf( "\n" );*/
for ( i = a[0]; i >= 1; --i )
printf( "%d", a[i] );
return 0;
}
void Conversie(int x, int b)
{
if ( x )
{
Conversie( x/b, b );
desc[++ind] = x%b;
}
}