Cod sursa(job #1184707)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 13 mai 2014 21:04:58
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <iomanip>
#include <vector>

const unsigned long long base=1000000;

inline void mul(std::vector<unsigned long long> &mare, unsigned long long x){
	unsigned long long rest=0;
	for(unsigned i=0;i<mare.size();++i){
		mare[i]=mare[i]*x+rest;
		rest=mare[i]/base;
		mare[i]%=base;
	}
	while(rest!=0){
		mare.push_back(rest%base);
		rest/=base;
	}
}


int main(){
	std::ifstream fin("patrate2.in");
	std::ofstream fout("patrate2.out");

	unsigned long long n; fin>>n;

	std::vector<unsigned long long> mare(1,1);
	mare.reserve(530);

	for(unsigned long long i=2;i<=n;++i) mul(mare,i);

	n*=n;
	while(n>0){
		if(n>30){ mul(mare,1ull<<30); n-=30; }
		else{ mul(mare,1ull<<n); n=0; }
	}


	int i=mare.size()-1;
	fout<<mare[mare.size()-1];
	--i;
	for(;i>=0;--i) fout<<std::setfill('0')<<std::setw(6)<<mare[i];
	fout<<'\n';
}