Pagini recente » Cod sursa (job #462658) | Cod sursa (job #1254687) | Cod sursa (job #1928248) | Cod sursa (job #803878) | Cod sursa (job #800317)
Cod sursa(job #800317)
Utilizator |
Nicu B. NicuCJ |
Data |
21 octombrie 2012 12:31:49 |
Problema |
Patrate2 |
Scor |
100 |
Compilator |
cpp |
Status |
done |
Runda |
as5 |
Marime |
1.58 kb |
#include <fstream>
using namespace std;
void inmultire(int a[], int b[], int c[])
{
int i, j, r=0;
c[0]=a[0]+b[0]-1;
for(i=1; i<=c[0]+1; i++)
{
c[i]=0;
}
for(i=1; i<=a[0]; i++)
{
for(j=1; j<=b[0]; j++)
{
c[i+j-1]+=a[i]*b[j];
}
}
for(i=1; i<=c[0]; i++)
{
c[i]+=r;
r=c[i]/10;
c[i]%=10;
}
if(r)
{
c[0]++;
c[c[0]]=r;
}
}
void putere(long long b, long long n, int rez[])
{
if(n==0)
{
rez[0]=1;
rez[1]=1;
}
else if(n%2==0)
{
int a[10001];
putere(b, n/2, a);
inmultire(a, a, rez);
}
else
{
int a[10001], x[10001], ba[10001];
ba[0]=1;
ba[1]=2;
putere(b, n/2, a);
inmultire(a, a, x);
inmultire(x, ba, rez);
}
}
void factorial(long long n, int rez[])
{
int k[10001], a[1000];
rez[0]=1;
rez[1]=1;
int i, j;
for(i=1; i<=n; i++)
{
a[0]=rez[0];
int aux=i;
k[0]=0;
while(aux)
{
k[0]++;
k[k[0]]=aux%10;
aux/=10;
}
for(j=1; j<=rez[0]; j++)
{
a[j]=rez[j];
}
inmultire(a, k, rez);
}
}
int xaxa[10001], papa[10001], rezultat[50001];
int main()
{
ifstream cin("patrate2.in");
ofstream cout("patrate2.out");
long long n, p, fact;
cin>>n;
putere(2, n*n, xaxa);
//la o posibilitate de aranjare a 5-urilor sunt n*n posibilitati de a pune - sau +
//sunt n! posibilitati (permutari) de a aranja 5-urile pe fiecare rand
factorial(n, papa);
inmultire(papa, xaxa, rezultat);
for(int i=rezultat[0]; i>=1; i--)
{
cout<<rezultat[i];
}
// cout<<p*fact;
}