Cod sursa(job #1687814)

Utilizator bogoismarandaBogoi Smaranda bogoismaranda Data 13 aprilie 2016 09:00:36
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
# include<algorithm>
# include<cstdio>
# include<cstring>
using namespace std;
const int NMAX=1000005;
 int a[NMAX], b[NMAX], c[NMAX];
void printh(int x[])
{
    for(int i=x[0];i>=1;--i)
        printf("%d", x[i]);
printf("\n");
}
void adunh(int a[], int b[], int c[])
{
    int tr,i,aux;
    c[0]=max(a[0],b[0]);
    tr=0;
    for(i=1;i<=c[0];i++)
    {
        aux=a[i]+b[i]+tr;
        c[i]=aux%10;
        tr=aux/10;
    }
    if(tr)
        c[++c[0]]=tr;
}
void scadh(int a[],int b[], int c[])
{
    int i, impr, aux;
    impr=0;
    c[0]=a[0];
    for( i=1;i<=c[0];i++)
    {
        aux=a[i]-b[i]-impr;
        if(aux<0)
        {
            aux=aux+10;
            c[i]=aux%10;
            impr=1;
        }
        else
        {
            c[i]=aux;
            impr=0;
        }
    }
    while(c[0]>1 && c[c[0]]==0)
        c[0]--;
}
int cmph(int a[], int b[])
{
    /* return 0 daca a=b;
              1 daca a>b;
              -1 daca a<b; */
if(a[0]>b[0]) return 1;
if(b[0]>a[0]) return -1;
for (int i=a[0];i>=1;i--)
    if(a[i]>b[i] ) return 1;
    else if(a[i]<b[i]) return -1;
return 0;
}
void prodhi (int a[], int k, int c[])
{
    int i,tr,aux;
    c[0]=a[0];
    for(i=1;i<=c[0];i++)
        c[i]=a[i]*k;
    tr=0;
    for(i=1;i<=c[0];i++)
    {
        aux=c[i]+tr;
        c[i]=aux%10;
        tr=aux/10;
    }
    while(tr)
    {
        c[++c[0]]=tr%10;
        tr=tr/10;
    }
 
}
void prodh(int a[], int b[], int c[])
{
    memset(c,0,sizeof(c));
    int i,j,tr,aux;
    c[0]=a[0]+b[0]-1;
    for(i=1;i<=a[0];i++)
    for(j=1;j<=b[0];j++)
        c[i+j-1]+=a[i]*b[j];
        tr=0;
        for(i=1;i<=c[0];i++)
        {
            aux=c[i]+tr;
            c[i]=aux%10;
            tr=aux/10;
        }
    if(tr) c[++c[0]]=tr;
}
long long  rest(long long k)
{
    int r=0;
    for(int i=a[0];i>=1;i--)
    {
        r=(10*r+a[i])%k;
    }
    return r;
}
int main()
{
    freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
    
    long long d;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    char sir[NMAX];
    gets(sir);
    int n,i;
    n=strlen(sir);
    for(i=n-1;i>=0;i--)
        a[n-i]=sir[i]-'0';
    a[0]=n;
    scanf("%lld", & d);
long long  x,k;
x=d-rest(d);
k=0;
while(x!=0)
{
    k++;
    b[k]=x%10;
    x/=10;
}
b[0]=k;
for(i=1;i<=k/2+1;i++)
    switch(b[i],b[n+1-i]);
adunh(a,b,c);
printh(c);
 
      return 0;
}