Pagini recente » Cod sursa (job #420258) | Cod sursa (job #1657574) | Cod sursa (job #2895359) | Cod sursa (job #2505936) | Cod sursa (job #354041)
Cod sursa(job #354041)
#include <iostream>
#include <fstream>
using namespace std;
#define LG_MAX 10000+1
typedef int BigNumber[LG_MAX];
BigNumber fact,nr2,nr,result;
char s[LG_MAX];
int i,N;
long long rez=1;
void inmultire (BigNumber a, long b)
{
int i,t=0;
for (i=1;i<=a[0] || t; i++, t/=10)
a[i]=(t+=a[i]*b)%10;
a[0]=i-1;
}
void produs (BigNumber a, BigNumber b, BigNumber p) //functie inmultire nr mare*nr mare
{
int i,t=0,cifra,j;
for (i=0;i<LG_MAX;i++)
p[i]=0;
for (i=1;i<=b[0];i++)
{
for (t=0,j=1;j<=a[0];j++)
{
cifra=p[i+j-1]+a[j]*b[i]+t; // i + j - 1 pentru ca atunci cand i = 1 si j = 1 rezultatul sa fie pus in 1 + 1 - 1 = 1, adica prima pozitie
p[i+j-1]=cifra%10;
t=cifra/10;
}
if (t) p[i+j-1]=t;
}
for (i=LG_MAX;i>0;i--)
if (p[i] != 0) {p[0] = i;break;} //aici verific cate cifre are rezultatul...un numar trebuie sa inceapa cu o cifra != 0
}
void putere ()
{
nr[0]=nr[1]=1;
for (i=1;i<=rez;++i)
inmultire(nr,2);
}
void factorial ()
{
fact[0]=fact[1]=1;
for (i=1;i<=N;i++)
inmultire(fact,i);
}
int main()
{
ifstream f("patrate2.in");
ofstream g("patrate2.out");
i=1;
f>>N;
f.close();
factorial();
rez=N*N;
putere();
/*for (i=nr[0];i>=1;--i)
cout<<nr[i];*/
produs(nr,fact,result);
for (i=result[0];i>=1;--i)
cout<<result[i];
g.close();
return 0;
}