Pagini recente » Cod sursa (job #722874) | Cod sursa (job #674734) | Cod sursa (job #1274232) | Cod sursa (job #379331) | Cod sursa (job #1332069)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("patrate2.in");
ofstream out("patrate2.out");
const int baza = 10;
class HugeN{
private:
vector <int> x;
public:
/// Constructori
HugeN() {
x.push_back( 0 );
}
HugeN( long long A ) {
do {
x.push_back( A % 10 );
A/= 10;
}
while( A );
}
/// Operators
HugeN operator +( const HugeN& O );
HugeN operator *=( long long O );
HugeN operator = ( const HugeN &O );
HugeN operator * ( const HugeN &O );
/// Afisare
void afis();
};
inline void HugeN :: afis() {
for( int i= (int)x.size()-1; i>=0; --i ) out << x[i];
}
HugeN HugeN::operator +( const HugeN& O ) {
int t= 0;
HugeN C;
for( int i= 0; i<(int)O.x.size() || t; ++i ) {
if( i == (int)x.size() ) x.push_back( 0 );
if( i<(int)O.x.size() ) x[i]+= O.x[i];
x[i]+= t;
if( x[i] >= baza ) {
t= 1;
x[i]-= baza;
}
else t= 0;
}
C.x= x;
return C;
}
HugeN HugeN::operator *=( long long O ) {
long long T= 0;
for( int i= 0; i<(int)x.size(); ++i ) {
long long aux= x[i]*O+T;
T= aux/baza;
x[i]= (int)( aux % baza );
}
while( T ) {
x.push_back( T%baza );
T/= baza;
}
return *this;
}
inline HugeN HugeN :: operator =( const HugeN &O ) {
x= O.x;
return *this;
}
inline HugeN HugeN :: operator *( const HugeN &O ) {
HugeN C;
C.x.resize( (int)x.size() + (int)O.x.size() - 1 );
for( int i= 0; i<(int)x.size(); ++i ) {
for( int j= 0; j<(int)O.x.size(); ++j ) {
C.x[i+j]+= x[i]*O.x[j];
}
}
int t= 0;
for( int i= 0; i<(int)C.x.size() || t; ++i ) {
if( i == (int)C.x.size() ) C.x.push_back( 0 );
C.x[i]+= t;
t= C.x[i] / baza;
C.x[i]%= baza;
}
return C;
}
long long N;
int main(){
in >> N;
HugeN A(N);
for( int i = 2; i < N; ++i ) A*=i;
HugeN R(1);
for( int i = 1; i <= N*N; ++i ) R*= 2;
R = R*A;
R.afis();
return 0;
}