Pagini recente » Cod sursa (job #2830069) | Cod sursa (job #1504857) | Cod sursa (job #2256549) | Cod sursa (job #2152952) | Cod sursa (job #896312)
Cod sursa(job #896312)
#include <cstdio>
#include <iterator>
#include <vector>
using namespace std;
class bigint : vector<int> {
public:
bigint() : vector<int>() {}
bigint(int n) {
while (n) {
push_back(n % 10);
n /= 10;
}
}
bigint operator+(bigint);
bigint operator*(bigint);
bigint pow(int);
void print();
};
bigint bigint::operator+(bigint b)
{
bigint res;
if (size() < b.size())
resize(b.size());
if (b.size() < size())
b.resize(size());
int carry = 0;
for (int i = 0; i < size(); ++i) {
int d = (*this)[i] + b[i] + carry;
res.push_back(d % 10);
carry = d / 10;
}
if (carry != 0)
res.push_back(carry);
return res;
}
bigint bigint::operator*(bigint b)
{
bigint res;
for (int i = 0; i < size(); ++i) {
bigint aux;
for (int k = 0; k < i; ++k)
aux.push_back(0);
int digit = (*this)[i];
int carry = 0;
for (int j = 0; j < b.size(); ++j) {
int d = b[j] * digit + carry;
aux.push_back(d % 10);
carry = d / 10;
}
if (carry != 0)
aux.push_back(carry);
res = res + aux;
}
return res;
}
bigint bigint::pow(int n)
{
bigint res = bigint(1);
bigint base = *this;
while (n) {
if (n % 2 == 1)
res = res * base;
base = base * base;
n /= 2;
}
return res;
}
void bigint::print()
{
vector<int>::reverse_iterator rit;
for (rit = rbegin(); rit != rend(); ++rit)
printf("%d", *rit);
printf("\n");
}
const int MAXN = 101;
bigint fact[MAXN];
void factorial()
{
fact[0] = bigint(1);
for (int i = 1; i < MAXN; ++i)
fact[i] = fact[i - 1] * bigint(i);
}
int main()
{
freopen("patrate2.in", "r", stdin);
freopen("patrate2.out", "w", stdout);
int n;
scanf("%d", &n);
factorial();
bigint res = fact[n] * bigint(2).pow(n * n);
res.print();
return 0;
}