Cod sursa(job #39527)

Utilizator tvladTataranu Vlad tvlad Data 26 martie 2007 19:58:19
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>

int n[1000000];
int dd[20];
long long d,r;

long long rest ( int a[], long long d ) {
	long long r = 0;
	for (int i = a[0]; i >= 1; --i) {
		r = (r*10+a[i]) % d;
	}
	return r;
}


void add ( int a[], int b[] ) {
	int t = 0;
	int min = (a[0] < b[0]) ? a[0] : b[0];
	for (int i = 1; i<=min || t>0; ++i) {
		if (i > a[0]) ++a[0];
		a[i] += (i > b[0]) ? 0 : b[i] + t;
		t = a[i] / 10;
		a[i] %= 10;
	}
}

int main() {
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	
	n[0] = 0;
	do {
		char c;
		scanf("%c",&c);
		if (c == '\n') {
			for (int i = 1; i <= n[0] / 2; ++i) {
				n[i] ^= n[n[0]-i+1];
				n[n[0]-i+1] ^= n[i];
				n[i] ^= n[n[0]-i+1];
			}
			break;
		} else {
			n[++n[0]] = c - '0';
		}
	} while (true);
	scanf("%lld",&d);

	r = rest(n,d);
	r = (d - r) % d;
	dd[0] = (int) log10( (long double) r) +1;
	for (int i = 1; r > 0; r /= 10, ++i) {
		dd[i] = r % 10;
	}
	add(n,dd);
	for (int i = n[0]; i > 0; --i) printf("%d",n[i]);
	printf("\n");
	return 0;
}