Cod sursa(job #39127)

Utilizator tvladTataranu Vlad tvlad Data 26 martie 2007 14:05:04
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>

const int NC = 1000000;

int n[NC], dd[NC];
long long d,r;

int mod (int A[], int B) {
	int i, t = 0;
	for (i = A[0]; i > 0; i--)
		t = (t * 10 + A[i]) % B;
	return t;
}

void add (int A[], int B[]) {
	int i, t = 0;
	for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
		A[i] = (t += A[i] + B[i]) % 10;
	A[0] = i - 1;
}

void trans (int a, int A[]) {
	for (int b = a; b > 0; b /= 10) {
		A[++A[0]] = b % 10;
	}
	for (int i = 1; i <= A[0]/2; ++i) {
		A[i] ^= A[A[0]-i+1];
		A[A[0]-i+1] ^= A[i];
		A[i] ^= A[A[0]-i+1];
	}
}

void print (int A[]) {
	for (int i = A[0]; i > 0; --i) {
		printf("%d",A[i]);
	}
	printf("\n");
}

int main() {
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	
	char *s = (char*) malloc((NC+1) * sizeof(char));
	scanf("%s",s);
	n[0] = strlen(s);
	for (int i = 1; i<=n[0]; ++i) {
		n[n[0]-i+1] = s[i-1] - '0';
	}
	scanf("%lld",&d);
	r = mod(n,d);
	d = (d - r)	% d;
	trans(d,dd);
	add(n,dd);
	print(n);
	return 0;
}