Cod sursa(job #2492939)

Utilizator DarkwarriorRobert Gaspar Darkwarrior Data 15 noiembrie 2019 17:37:31
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
///Raspunsul este n!*(2^(n^2))
using namespace std;

ifstream f("patrate2.in");
ofstream g("patrate2.out");

struct Huge{
    int a[100000];
};

void makeHuge(Huge &H, unsigned long X) {
  H.a[0] = 0;
  while (X) {
      ++H.a[0];
      H.a[H.a[0]] = X % 10;
      X /= 10;
  }
}

void mult(Huge &H, unsigned long X)
{ int i;
  unsigned long T=0;

  for (i=1;i<=H.a[0];i++)
    { H.a[i]=H.a[i]*X+T;
      T=H.a[i]/10;
      H.a[i]=H.a[i]%10;
    }
  while (T)
    { H.a[++H.a[0]]=T%10;
      T/=10;
    }
}
void MultHuge(Huge &A, Huge &B, Huge &C)
{ int i,j,T=0;

  C.a[0]=A.a[0]+B.a[0]-1;
  for (i=1;i<=A.a[0]+B.a[0];) C.a[i++]=0;
  for (i=1;i<=A.a[0];i++)
    for (j=1;j<=B.a[0];j++)
      C.a[i+j-1]+=A.a[i]*B.a[j];
  for (i=1;i<=C.a[0];i++)
    { T=(C.a[i]+=T)/10;
      C.a[i]%=10;
    }
  if (T) C.a[++C.a[0]]=T;
}
int main()
{
    int n;
    f>>n;
    Huge A;
    Huge B;
    Huge C;
    makeHuge(A,1);
    makeHuge(B,1);
    for(int i=1;i<=n;i++){
        mult(A,i);
    }
    for(int i=1;i<=n*n;i++){
        mult(B,2);
    }
    MultHuge(A,B,C);
    for(int i=C.a[0];i>=1;i--){
        g<<C.a[i];
    }
    return 0;
}