Pagini recente » Cod sursa (job #39830) | Cod sursa (job #1380079) | Cod sursa (job #2397533) | Cod sursa (job #3286650) | Cod sursa (job #2278041)
#include <iostream>
#include <fstream>
#include <cstring>
#define NUM 5000
using namespace std;
ifstream f("patrate2.in");
ofstream g("patrate2.out");
int n;
struct Huge
{
int v[NUM];
Huge(int num)
{
v[0] = 0;
do
{
v[++v[0]] = num % 10;
num /= 10;
}
while(num);
}
Huge(char * s)
{
for(int i = 0; i < NUM; ++i)
v[i] = 0;
int lng = strlen(s);
for(int i = lng - 1, j = 1; i >= 0; --i)
v[j] = s[i] - '0';
v[0] = lng;
}
void afis()
{
for(int i = v[0]; i >= 1; --i)
g << v[i];
g << "\n";
}
void copie(Huge a)
{
for(int i = a.v[0]; i >= 0; --i)
v[i] = a.v[i];
}
};
void add(Huge & a, Huge b)
{
int i, t = 0;
if (b.v[0] > a.v[0])
{
for (i = a.v[0] + 1; i <= b.v[0];)
a.v[i++]=0;
a.v[0] = b.v[0];
}
else
for (i = b.v[0] + 1; i <= a.v[0];)
b.v[i++]=0;
for(i = 1; i <= a.v[0]; i++, t /= 10)
{
t += a.v[i] + b.v[i];
a.v[i] = t % 10;
}
if(t)
a.v[++a.v[0]] = t;
}
void mult(Huge & A, Huge B)
{
int i,j, T = 0;
Huge C(0);
C.v[0] = A.v[0] + B.v[0] - 1;
for (i = 1; i <= A.v[0] + B.v[0];)
C.v[i++] = 0;
for (i = 1; i <= A.v[0]; i++)
for (j = 1; j <= B.v[0]; j++)
C.v[i + j - 1] += A.v[i] * B.v[j];
for (i = 1; i <= C.v[0]; i++)
{
T = (C.v[i] += T) / 10;
C.v[i] %= 10;
}
if (T)
C.v[++C.v[0]] = T;
for(i = 0; i <= C.v[0]; ++i)
A.v[i] = C.v[i];
}
int put(int a, int b)
{
int rez = 1;
for(int i = 1; i <= b; ++i)
rez *= a;
return rez;
}
void puth(Huge & a, int put)
{
Huge rez(1);
while(put)
{
if(put & 1)
mult(rez, a);
put = put >> 1;
mult(a, a);
}
a.copie(rez);
}
int main()
{
f >> n;
Huge rasp(1);
Huge aux(2);
for(int i = 2; i <= n; ++i)
mult(rasp, i);
puth(aux, n * n);
mult(rasp, aux);
rasp.afis();
f.close();
g.close();
}