Cod sursa(job #44701)

Utilizator alextheroTandrau Alexandru alexthero Data 31 martie 2007 17:18:44
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

#define cmax 1000005

using namespace std; 

char ch;
int a[cmax],b[cmax],n,d;

int cifra(char x) {
	if(x >= '0' && x <= '9') return 1;
	else return 0;
}

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

void put(int a[],int v) {
	memset(a,0,sizeof(a));
	do {
		a[++a[0]] = v % 10;
		v /= 10;
	} while(v > 0);
}

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

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

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

	while(1) {
		scanf("%c",&ch);
		if(cifra(ch)) a[++a[0]] = int(ch - '0');
		else break;
	}
	reverse(a + 1, a + a[0] + 1);
	scanf("\n");
	scanf("%d",&d);
	int r = rest(a,d);
	d -= r;
	if(d > 0) {
		put(b,d);
		add(a,b);
	}
	show(a);

	return 0;
}