Cod sursa(job #1410625)

Utilizator cypry97Dascalitei Ciprian cypry97 Data 31 martie 2015 10:29:41
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;

#define base 100000000
unsigned long long  nr[400];
int l=1;

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

void mult (unsigned long long  &x)
{
    unsigned long long r=0;
    int i;
    for(i=1;i<=l;i++)
    {
        nr[i]*=x;
        nr[i]+=r;
        r=(nr[i]-nr[i]%base)/base;
        nr[i]%=base;
    }
    if(r!=0)
    {
        l++;
        nr[l]=r;
    }
}

inline int nrcif(unsigned long long x)
{
    int nr=1;
    x/=10;
    while(x)
    {
        x/=10;
        nr++;
    }
    return nr;
}

int main()
{
    int exp,p;
    int n;
    unsigned long long x;
    in>>n;
    exp=n*n;
    p=26;
    x=1<<p;
    nr[1]=1;
    while( exp )
    {
        while(exp<p)
        {
            x>>=1;
            p--;
        }
        mult(x);
        exp-=p;
    }
    while(n>4)
    {
        x=n*(n-1)*(n-2)*(n-3);
        n-=4;
        mult(x);
    }
    if(n==4)
        x=24,mult(x);
    if(n==3)
        x=6,mult(x);
    if(n==2)
        x=2,mult(x);
    out<<nr[l];
    l--;
    while(l)
    {
        n=nrcif(nr[l]);
        while(n<8)
        {
            out<<0;
            n++;
        }
        out<<nr[l];
        l--;
    }
}