Cod sursa(job #2323639)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 19 ianuarie 2019 14:35:31
Problema Sarpe Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <cstdio>
#include <iostream>

using namespace std;
int v[10000],x[10000],y[10000],aux[10000];
void add(int a[],int b[]){
    int i,t=0;
    for (i=a[0]+1;i<=b[0];i++)
        a[i]=0;
    for (i=b[0]+1;i<=a[0];i++)
        b[i]=0;
    a[0]=max(a[0],b[0]);
    for (i=1;i<=a[0];i++){
        a[i]+=b[i]+t;
        t=a[i]/10;
        a[i]%=10;
    }
    if (t)
        a[++a[0]]=1;
}
void scad (int a[]){
    int i=1;
    while (a[i]==0){
        a[i]=9;
        i++;
    }
    a[i]--;
    if (a[a[0]]==0 && a[0]>1)
        a[0]--;
}
void inmult (int a[],int xx){
    int i,t=0;
    for (i=1;i<=a[0];i++){
        a[i]=a[i]*xx+t;
        t=a[i]/10;
        a[i]%=10;
    }
    while (t){
        a[++a[0]]=t%10;
        t/=10;
    }
}
void inmult_vect (int a[],int b[]){
    int i,j,t=0;
    aux[0]=a[0]+b[0]-1;
    for (i=1;i<=a[0];i++){
        for (j=1;j<=b[0];j++)
            aux[i+j-1]+=a[i]*b[j];
    }
    for (i=1;i<=aux[0];i++){
        aux[i]+=t;
        t=aux[i]/10;
        aux[i]%=10;
    }
    while (t){
        aux[++aux[0]]=t%10;
        t/=10;
    }
}
int main()
{
    FILE *fin=fopen ("sarpe.in","r");
    FILE *fout=fopen ("sarpe.out","w");
    int st,dr,i;
    char c;
    c=fgetc (fin);
    while ('0'<=c && c<='9'){
        v[++v[0]]=c-'0';
        c=fgetc (fin);
    }
    st=1;
    dr=v[0];
    while (st<dr){
        swap(v[st],v[dr]);
        st++;
        dr--;
    }
    if (v[0]==1 && v[1]==1)
        fprintf (fout,"2");
    else if (v[0]==1 && v[1]==2)
        fprintf (fout,"8");
    else {
        for (i=0;i<=v[0];i++)
            x[i]=v[i];
        scad (x);
        for (i=0;i<=x[0];i++)
            y[i]=x[i];
        scad (y);
        inmult_vect (x,y);
        inmult (aux,2);
        inmult (v,4);
        add(v,aux);
        for (i=v[0];i;i--)
            fprintf (fout,"%d",v[i]);
    }
    return 0;
}