Cod sursa(job #2105002)

Utilizator Steve_ITStefan Ursache Steve_IT Data 12 ianuarie 2018 15:03:13
Problema Patrate2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

using namespace std;

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

typedef int nrmare[5010];
void produsMic(nrmare a, int x) {
    int i, t = 0;
    for(i=1; i<=a[0]; i++, t/=10) {
        t+=x*a[i];
        a[i]=t%10;
    }
    while(t) {
        a[++a[0]] = t%10;
        t/=10;
    }
}
void produsMare(nrmare x, nrmare y) {
    int i, j, t = 0;
    nrmare z;
    z[0] = x[0] + y[0] -1;
    for(i=1; i<=x[0]+y[0]; i++)
        z[i] = 0;
    for(i=1; i<=x[0]; i++)
        for(j=1; j<=y[0]; j++)
            z[i+j-1] = x[i] * y[j];
    for(i=1; i<=z[0]; i++) {
        t+=z[i];
        z[i] = t%10;
        t/=10;
    }
    if(t)
        z[++z[0]] = t;
    for(i=0; i<=z[0]; i++)
        x[i] = z[i];
}
nrmare a, b;
int n, i;

int main()
{
    f>>n; a[0]=a[1]=1;
    for(i=n; i>=1; i--)
        produsMic(a, i);
    n*=n;
    b[0] = 1; b[1] = 2;
    while(n>0) {
        if(n%2 == 1) {
            n--;
            produsMare(a, b);
        }
        else {
            n/=2;
            produsMare(b, b);
        }
    }
    for(i=1; i<=a[0]; i++)
        g<<a[a[0]-i+1];
    g<<'\n';
    return 0;
}