Cod sursa(job #44675)

Utilizator peanutzAndrei Homorodean peanutz Data 31 martie 2007 17:04:15
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <string.h>

#define NMAX 490000

long a[NMAX];
long long d;
long long r;


void read()
{
	long i;
	char c[NMAX];
	long n;

	scanf("%s\n", c);
	n = strlen(c)-1;
	//a[a[0]] = n-1;

	do
	{
		//scanf("%c", &c);

		if(c[n] != '\n')
		{
			a[ ++a[0] ] = c[n--] - '0';
		}
	}	while(n > -1);

	scanf("%lld\n", &d);
}

long long rest(long long d)
{
	long long t;
	long long i;

	for(i = a[0], t = 0; i; --i)
	{
		t = (t * 10 + a[i]) % d;
	}
return t;
}

void adunare(long long d)
{
	long long i, t, r = 0;
	long b[9000];

        memset(b, 0, sizeof(b));

	while(d)
	{
		r = r*10 + d%10;
		d /= 10;
	}
	d = r;

	while(d)
	{
		b[ ++b[0] ] = d % 10;

		d /= 10;
	}


	for(i = 1, t = 0; i <= a[0] || i <= b[0] || t; ++i, t /= 10)
	{
		a[i] = (t += a[i] + b[i]) % 10;
	}

	a[i] = i-1;
}

void write()
{
	long i;

	for(i = a[0]; i; --i)
	{
		printf("%ld", a[i]);
	}
	printf("\n");
}
int main()
{
	freopen("next.in", "r", stdin);
	freopen("next.out", "w", stdout);

	read();

	adunare((d - rest(d)) % d);

	//int aux = rest(d);

	write();

	fclose(stdin);
	fclose(stdout);

	return 0;
}