Pagini recente » Cod sursa (job #21121) | Cod sursa (job #2006511) | Cod sursa (job #417832) | Cod sursa (job #1830352) | Cod sursa (job #163129)
Cod sursa(job #163129)
#include <iostream>
#include <fstream>
using namespace std;
class BigNum;
ostream& operator<<(ostream &, const BigNum &);
class BigNum {
public:
BigNum() {
len = 1;
memset(data, 0, sizeof(data));
data[0] = 1;
}
void operator*=(int other) {
int r = 0;
for (int i(0); i < len; ++i) {
data[i] = other*data[i];
r = data[i] / 10000;
data[i] %= 10000;
}
if (r)
data[len++] = r;
}
void operator*=(BigNum other) {
BigNum c;
c.data[0] = 0;
for (int i(0); i < other.len; ++i) {
int r = 0;
for (int j(0); j < len; ++j) {
c.data[i+j] += other.data[i]*data[j] + r;
r = c.data[i+j] / 10000;
c.data[i+j] %= 10000;
}
c.len = len + i;
if (r)
c.data[c.len++] += r;
}
len = c.len;
memcpy(data, c.data, sizeof(data));
}
int data[65056];
int len;
};
ostream& operator<<(ostream &os, const BigNum &bn) {
for (int i = bn.len - 1; i >= 0; --i)
os << bn.data[i];
return os;
}
int N;
BigNum pow2(int n) {
BigNum r;
for (int i = 1<<30; i > 0; i >>= 1) {
r *= r;
if (i & n)
r *= 2;
}
return r;
}
BigNum fact(int n) {
BigNum r;
for (int i(2); i <= n; ++i)
r *= i;
return r;
}
int main(int argc, char *argv[]) {
ifstream fin("patrate2.in");
fin >> N;
fin.close();
BigNum a = pow2(N*N);
BigNum b = fact(N);
//cout << a << " * " << b;
a *= b;
//cout << " = " << a << endl;
ofstream fout("patrate2.out");
fout << a << endl;
fout.close();
return 0;
}