Pagini recente » Cod sursa (job #11808) | Cod sursa (job #156885) | Cod sursa (job #226875) | Cod sursa (job #295025) | Cod sursa (job #2069831)
#include <fstream>
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
typedef int NrMare[100010];
void ProdusMic(NrMare x, int n)
{
int i,t=0;
for(i=1;i<=x[0];i++,t/=10)
{
t+=x[i]*n;
x[i]=t%10;
}
for(;t;t/=10)
x[++x[0]]=t%10;
}
void ProdusMare(NrMare x, NrMare y)
//x = x * y
{
int i,j,t=0;
NrMare z;
//stabilim lungimea rezultatului. S-ar putea modifica
z[0]=x[0]+y[0]-1;
//initializez vectorul z
for(i=1;i<=x[0]+y[0];i++)
z[i]=0;
//calculez produsele intermediare, impreuna cu suma intermediara
for(i=1;i<=x[0];i++)
for(j=1;j<=y[0];j++)
z[i+j-1]+=x[i]*y[j];
//corectez sumele intermediare
for(i=1;i<=z[0];i++)
{
t+=z[i];
z[i]=t%10;
t/=10;
}
if(t)
z[++z[0]]=t;
// pun rezultatul in x
for(i=0;i<=z[0];i++)
x[i]=z[i];
}
int n, i, k;
NrMare v,a,b;
int main()
{
f>>n;
v[0]=1, v[1]=1;
for (i=2; i<=n; i++) ProdusMic(v,i); // v=n!
n*=n;
a[0]=a[1]=1; b[0]=1, b[1]=2;
while (n) {
if (n%2) {
ProdusMare(a,b); n--;
}
else {
ProdusMare(b,b); n/=2;
}
}
ProdusMare(v,a);