Cod sursa(job #65391)

Utilizator andreisfrentSfrent Andrei andreisfrent Data 9 iunie 2007 11:38:07
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>
#include <string.h>

#define maxn 1000001
#define maxd 1000001

int n[maxn];
//int d[maxd];
//int r[maxd];
int aux[maxd];
void swap(int &a, int &b)
{
	int aux = a;
	a=b;
	b=aux;
}
long mod(int A[], long B)   
{   
      int i, t = 0;   
      for (i = A[0]; i > 0; i--)   
              t = (t * 10 + A[i]) % B;   
      return t;   
}   
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;   
}   
void sub(int A[], int B[])   
{   
      int i, t = 0;   
      for (i = 1; i <= A[0]; i++)   
              A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;   
      for (; A[0] > 1 && !A[A[0]]; A[0]--);   
}   
void init()
{
	//memset(n,0,sizeof(n));
	//memset(aux,0,sizeof(aux));
	//memset(d,0,sizeof(d));
	//memset(r,0,sizeof(r));
}
int main()
{
	//init();
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
	char x;
	scanf("%c",&x);
	while(1)
	{
		n[++n[0]]=(int)(x-48);
		scanf("%c",&x);  
		if (!('0' <= x && x <= '9')) break;
	}
	long long _d,i;
	scanf("%lld",&_d);
	/*
	while(1)
	{
		d[++d[0]]=(int)(x-48);
		scanf("%c",&x);  
		if (!('0' <= x && x <= '9')) break;
	}
	*/
	for(i=1;i<=n[0]/2;++i) swap(n[i],n[n[0]-i+1]);
	long long _r = mod(n,_d);
	long long _aux=(_d-_r)%_d;
	long long p=_aux;
	while(p)
	{
		aux[++aux[0]]=p%10;
		p/=10;
	}
	if(!aux[0]) aux[0]++;
	for(i=1;i<=aux[0]/2;++i) swap(aux[i],aux[aux[0]-i+1]);
	add(n,aux);
	for(i=n[0];i>0;--i) printf("%d",n[i]);	
	return 0;
}