Cod sursa(job #1678681)

Utilizator bogoismarandaBogoi Smaranda bogoismaranda Data 7 aprilie 2016 14:49:02
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include<algorithm>
# include<cstdio>
# include<cstring>
using namespace std;
const int NMAX=100;

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;
}


int rest(int a[], int 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);
	int a[NMAX], b[NMAX], c[NMAX], d;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	char sir[1000000];
	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("%d", & d);
int x,k;
x=d-rest(a,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;
}