Pagini recente » Cod sursa (job #1775446) | Cod sursa (job #1666245) | Cod sursa (job #2747355) | Cod sursa (job #1621742) | Cod sursa (job #2105032)
#include <fstream>
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
typedef int nrmare[5010];
void produsMic(nrmare a, int x) {
int i, t = 0;
for(i=1; i<=a[0]; i++, t/=10) {
t+=x*a[i];
a[i]=t%10;
}
while(t) {
a[++a[0]] = t%10;
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];
}
nrmare a, b;
int n, i;
int main()
{
f>>n; a[0]=a[1]=1;
for(i=n; i>=1; i--)
produsMic(a, i);
n*=n;
b[0] = 1; b[1] = 2;
while(n>0) {
if(n%2 == 1) {
n--;
produsMare(a, b);
}
else {
n/=2;
produsMare(b, b);
}
}
for(i=1; i<=a[0]; i++)
g<<a[a[0]-i+1];
g<<'\n';
return 0;
}