Cod sursa(job #2786142)

Utilizator YusyBossFares Yusuf YusyBoss Data 20 octombrie 2021 13:26:50
Problema Patrate2 Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin ("patrate2.in");
ofstream cout ("patrate2.out");

struct strhuge {
  int ncif;
  vector <int> vcif;
};

void afis(strhuge A) {
  int i;
  for (i = A.ncif - 1; i >= 0; i--)
    cout << A.vcif[i];
}

strhuge inmultire_huge(strhuge A, int val) {
  int t = 0, ncur, i;

  ncur = A.ncif;
  for (i = 0; i < ncur; i++) {
    t = t + val * A.vcif[i];
    A.vcif[i] = t % 10;
    t /= 10;
  }

  while (t > 0) {
    A.vcif.push_back(t % 10);
    A.ncif++;
    t /= 10;
  }

  return A;
}

static inline int lsb(int val) { /// least significant bit
  return val & (-val);
}

strhuge inmult_put2(strhuge A, int exp) {
  while (exp > 0) {
    A = inmultire_huge(A, (1 << lsb(exp)));
    exp -= lsb(exp);
  }
  return A;
}

int main() {
  int n, i;
  strhuge sol;

  cin >> n;

  sol.ncif = 1;
  sol.vcif.push_back(1);

  for (i = 1; i <= n; i++)
    sol = inmultire_huge(sol, i);

  sol = inmult_put2(sol, n * n);
  afis(sol);
  return 0;
}