Cod sursa(job #45521)

Utilizator andrei.12Andrei Parvu andrei.12 Data 1 aprilie 2007 17:17:55
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#define max 1000000
int a[max], p, re[max], r, aux;
long long d;
long long  mod(int a[max], long long b){
	int i;
	long long t=0;
	for (i=a[0];i>0;i--)
		t=(t*10+a[i])%b;
	return t;
}

void adn(int a[max], int b[max]){
	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 scrie(int a[max]){
	int i;
	for (i=a[0];i>0;i--)
		printf("%d",a[i]);
}
int main(){
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	int j;
	char x;
	p=0;
	scanf("%c",&x);
	while (x!='\n'){
		p++;
		a[p]=x-'0';
		scanf("%c",&x);
	}
	for (j=1;j<=p/2;j++){
		aux=a[j];
		a[j]=a[p-j+1];
		a[p-j+1]=aux;
	}
	a[0]=p;
	scanf("%lld",&d);
	r=mod(a,d);
	r=d-r;
	if (r==d){ scrie(a); printf("\n");}
	else {
		p=0;
		while (r>0){
			p++;
			re[p]=r%10;
			r=r/10;
		}
		re[0]=p;
		adn(a,re);
		scrie(a);
		printf("\n");
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}