Pagini recente » Cod sursa (job #1061907) | Cod sursa (job #3339759) | Cod sursa (job #2740347) | Cod sursa (job #1532960) | Cod sursa (job #3340525)
#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#define pb push_back
using namespace std;
//#define MOD 1999999973
#define f first
#define s second
struct nr {
vector <int> a;
};
nr combine( nr a, nr b){
nr aux;
int over = 0;
aux.a.resize(max(a.a.size(), b.a.size()), 0);
for(int i=0;i < aux.a.size(); i++) {
aux.a[i] += over;
if(i<a.a.size()) aux.a[i] += a.a[i];
if(i < b.a.size()) aux.a[i] += b.a[i];
if(aux.a[i] >= 10) {
aux.a[i] -= 10;
over =1;
} else over = 0;
}
if(over == 1) {
aux.a.push_back(1);
}
return aux;
}
void mult(nr &a, int x){
int over = 0;
for(int i=0;i < a.a.size(); i++) {
a.a[i] *= x;
a.a[i] += over;
over = a.a[i] / 10;
a.a[i] %= 10;
}
while(over > 0) {
a.a.push_back(over % 10);
over /= 10;
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
ifstream cin("patrate2.in");
ofstream cout("patrate2.out");
int n; cin >> n;
nr partial;
partial.a.resize(1);
partial.a[0]=1;
for(int i=1;i <= n * n; i++) partial = combine(partial, partial);
for(int i = 2; i <= n; i++) mult(partial, i);
for(int i=partial.a.size() - 1; i >= 0; i--) cout << partial.a[i];
return 0;
}