Cod sursa(job #581554)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 14 aprilie 2011 12:27:33
Problema Sarpe Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<stdio.h>
#include<string.h>

#define NMAX 10005

char s[NMAX];

void adun(int a[],int b[])
{
    int i,t=0;
    for(i=1;i<=a[0] || i<=b[0] || t;i++)
    {
        if(i>a[0])
            a[i]=0;
        if(i>b[0])
            b[i]=0;
        a[i]+=b[i]+t;
        t=a[i]/10;
        a[i]%=10;
    }
    a[0]=i-1;
}

void inmul(int a[],int val)
{
    int t=0,i;
    for(i=1;i<=a[0] || t;i++)
    {
        if(i>a[0])
            a[i]=0;
        a[i]=a[i]*val+t;
        t=a[i]/10;
        a[i]%=10;
    }
    a[0]=i-1;
}

void scad(int a[],int b[],int c[])
{
    int i,t=0;
    for(i=1;i<=b[0] || i<=c[0] || t;i++)
    {
        if(i>b[0])
            b[i]=0;
        if(i>c[0])
            c[i]=0;
        a[i]=b[i]-c[i]-t;
        if(a[i]<0)
        {
            a[i]+=10;
            t=1;
        }
        else
            t=0;
    }
    a[0]=i-1;
    while(a[0] && !a[a[0]])
        a[0]--;
}

void inmultesc(int a[],int b[],int c[])
{
    int i,j,dec,aux[NMAX];
    
    for(i=0;i<=c[0];i++)
        aux[i]=c[i];
    for(i=1;i<=b[0];i++)
    {
        inmul(c,b[i]);
        dec=i-1;
        for(j=c[0];j>=1;j--)
            c[j+dec]=c[j];
        for(j=dec;j>=1;j--)
            c[j]=0;
        c[0]+=dec;
        adun(a,c);
        for(j=0;j<=aux[0];j++)
            c[j]=aux[j];
    }
}

int main ()
{
    int i,nr;
    int v[NMAX],v2[NMAX];
    int a[NMAX],b[NMAX],c[NMAX];
    
    freopen("sarpe.in","r",stdin);
    freopen("sarpe.out","w",stdout);
    scanf("%s",s);
    nr=strlen(s);
    for(i=1;i<=nr;i++)
        v[i]=s[nr-i]-'0';
    v[0]=nr;
    v2[0]=v2[1]=1;
    scad(a,v,v2);
    v2[1]=2;
    scad(b,v,v2);
    inmultesc(c,a,b);
    inmul(v,4);
    inmul(c,2);
    adun(c,v);
    for(i=c[0];i>=1;i--)
        printf("%d",c[i]);
    printf("\n");
    return 0;
}