Cod sursa(job #38281)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 25 martie 2007 16:57:52
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>

const int N_MAX = 1000001;

int N[N_MAX], pl[100];
long long D, rest;

long long mod(int A[], long long B)
{
	int i;
    long long t = 0;
	for (i = A[0]; i > 0; i --) {
		t = (t * 10 + A[i]) % B;
//		printf("%lld\n", t);
	}

	return t;
}

void rev(int A[])
{
	int i, aux;
	
	for (i = 1; i <= A[0] / 2; i ++) {
		aux = A[i];
		A[i] = A[A[0] - i + 1];
		A[A[0] - i + 1] = aux;
	}	
}

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

int main()
{
	freopen("next.in", "r", stdin);
#ifndef _KKT_
	freopen("next.out", "w", stdout);
#endif

	char c;
	scanf("%c", &c);
	while (c != '\n') {
		N[++ N[0]] = c - '0';
//		printf("%c %d\n", c, N[0]);
		scanf("%c", &c);
	}
//	return 0;

	int i;
	rev(N);

	scanf("%lld\n", &D);
	rest = mod(N, D);
//	return 0;
	
	if (rest == 0) {
		for (i = N[0]; i >= 1; i --) {
			printf("%d", N[i]);
		}
		printf("\n");
	} else {
		D -= rest;

		while (D > 0) {
			pl[++ pl[0]] = D % 10;
			D /= 10;
		}
		
		add(N, pl);
		for (i = N[0]; i >= 1; i --) {
			printf("%d", N[i]);
		}
		printf("\n");
	}
	
	return 0;
}