Cod sursa(job #2378394)

Utilizator carburatorMitica Carburator carburator Data 12 martie 2019 10:22:11
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
using namespace std;
ifstream fin("patrate2.in");
ofstream fout("patrate2.out");
int pow[4000],i,N,j,aux,fact[200],val[1000001];
int main()
{
    fin>>N; pow[0]=1; pow[1]=2;
    //de determinat 2^(N*N) * N!
    //putere a lui 2
    for(i=2;i<=N*N;i++){ aux=0;
        for(j=1;j<=pow[0];j++){
            pow[j]*=2; pow[j]+=aux; aux/=10;
            aux+=pow[j]/10;
            pow[j]%=10;
        }
        if(aux){pow[0]++;
        pow[pow[0]]=aux;
        }
//        for(j=1;j<=pow[0];j++)fout<<pow[j]; fout<<'\n';
    }
//   factorial
//
    fact[0]=fact[1]=1;
    for(i=2;i<=N;i++){ aux=0;
        for(j=1;j<=fact[0];j++){
            fact[j]*=i; fact[j]+=(aux%10); aux/=10;
            aux+=fact[j]/10;
            fact[j]%=10;
        }
        while(aux){fact[0]++;
        fact[fact[0]]=aux%10;
        aux/=10;
        }
////        for(j=1;j<=fact[0];j++)fout<<fact[j]; fout<<'\n';
    }
    //inmultire factorial cu 2^(N^N)

    //
    val[0]=fact[0]+pow[0]-1; aux=0;
    for(i=1;i<=fact[0];i++)
        for(j=1;j<=pow[0];j++)
          val[i+j-1]+=fact[i]*pow[j];

    for(i=1;i<=val[0];i++){
       val[i]+=(aux%10); aux/=10;
       aux+=val[i]/10;
       val[i]%=10;
    }
    while(aux){val[0]++;
    val[val[0]]=aux%10; aux/=10;}

    for(i=val[0];i>=1;i--)fout<<val[i];
    return 0;
}