Cod sursa(job #45608)

Utilizator peanutzAndrei Homorodean peanutz Data 1 aprilie 2007 18:55:47
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <string.h>

#define NMAX 8011000

short int 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;
	short int b[10000];

	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[0] = i-1;
}

void write()
{
	long i;

	for(i = a[0]; i; --i)
	{
		printf("%d", 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;
}