Cod sursa(job #3140355)

Utilizator daristyleBejan Darius-Ramon daristyle Data 5 iulie 2023 18:00:23
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream fin("patrate2.in");
ofstream fout("patrate2.out");

const int DIGITS_MAX = 15828;

struct HugeNumber {
		short digits = 0;
		char d[DIGITS_MAX]{};

		HugeNumber(int a) {
			do
				d[digits++] = a % 10;
			while(a /= 10);
		}

		friend HugeNumber operator*(const HugeNumber b, const int a) {
			HugeNumber ret(0);
			ret.digits = 0;
			int i = 0, carry = 0;

			while(i < b.digits){
				carry += b.d[i++] * a;
				ret.d[ret.digits++] = carry % 10;
				carry /= 10;
			}

			while(carry){
				ret.d[ret.digits++] = carry % 10;
				carry /= 10;
			}

			return ret;
		}

		friend void operator*=(HugeNumber &b, const int a) {
			b = b * a;
		}

		void print(ofstream &fout) {
			for(int i = digits - 1; i >= 0; --i)
				fout.put(d[i] + '0');

			fout.put('\n');
		}
};


int main() {
	int n;
	HugeNumber ans(1);
	fin >> n;

	for(int i = 2; i <= n; ++i)
		ans *= i;

	for(int i = 0; i < n * n; ++i)
		ans *= 2;

	ans.print(fout);

	fin.close();
	fout.close();
	return 0;
}