Cod sursa(job #679007)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 12 februarie 2012 17:30:12
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<string.h>
long n,i,a[10000],b[10000],c[10000];
void add(long a[],long b[])
{
    long i,t=0;
    for(i=1;i<=a[0]||i<=b[0]||t;i++,t/=10)
        a[i]=(t+=a[i]+b[i])%10;
    a[0]=i-1;
}
void mul(long a[],long b)
{
    long i,t=0;
    for(i=1;i<=a[0]||t;i++,t/=10)
        a[i]=(t+=a[i]*b)%10;
    a[0]=i-1;
}

int main()
{
    freopen("petrecere.in","r",stdin);
    freopen("petrecere.out","w",stdout);
    scanf("%ld",&n);
    if(n==1)printf("1\n");
    if(n==2)printf("2\n");
    if(n<3)return 0;
    a[0]=a[1]=1;
    b[0]=1;b[1]=2;
    for(i=3;i<=n;++i)
    {
        memcpy(c,a,sizeof(a));
        memcpy(a,b,sizeof(b));
        mul(c,i-1);
        add(b,c);
    }
    for(i=b[0];i;--i)
    printf("%ld",b[i]);
    printf("\n");
    return 0;
}