Cod sursa(job #3140357)

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

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

const int DIGITS_MAX = 15828;
const int POWER = 27;

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 / POWER; ++i)
		ans *= (1 << POWER);

	ans *= (1 << (n * n % POWER));

	ans.print(fout);

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