Cod sursa(job #286650)

Utilizator drag0s93Mandu Dragos drag0s93 Data 23 martie 2009 23:28:06
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<string.h>


#define IN "next.in","r",stdin
#define OUT "next.out","w",stdout
#define Nmax 1000020
#define Max 20


int v[Nmax],a[Max];

int d1;

char n[Nmax] , d[Max];

int rez[Nmax],sum[Max];


void citire()
{
	int E = 1 , i ;


	freopen(IN);

	scanf("%s%s",n,d);

	for( i = strlen(n) - 1; i >= 0  ; i--)
		v[E++] =  n[i] - '0';
	v[0] = strlen(n);

	int T = 1;


	for( i = strlen(d) - 1   ; i >= 0  ; --i)
	{
		a[T++] = d[i] - '0';
		d1 += (d[i] - '0')*10;
	}
	a[0] = strlen(d);
}

void afisare()
{
	freopen(OUT);

	int t = 0 , i , j ;

	for(int i=1;i<=sum[0];++i)
		printf("%d ",sum[i]);

	for( i = 1 ;i <= v[0] || i <= sum[0] || t;++i )
	{
		t += v[i] + sum[i];
		v[i] = t % 10;
		t /= 10;
	}

	for(j = i - 1; j >=1; ++j)
		printf("%d",v[j]);
	printf("\n");
}

void dif()
{
	int t = 0 , T = 1 , i ;


	for (i = 1; i <= a[0] || i <= rez[0] || t; i++) 
	{
		t+=a[i] - rez[i];
		if(t < 0)
			t+=10;
     	sum[i] = t  * 10;  
	}
	
	sum[0] = i - 1;

	afisare();
}

void solve()
{
	int t = 0,T = 1 ,i ;

/*
	for(int i =1 ;i <= v[0];++i)
		printf("%d %d",v[i],a[i]);
*/
	 for (i = v[0]; i > 0; i--, t %= d1)  
		 rez[i] = (t = t * 10 + v[i]) / d1;  
	for (; v[0] > 1 && !v[v[0]]; v[0]--);  
	

	rez[0] = i - 1;

	dif();
}

int main()
{
	citire();

	solve();

	return 0;
}