Cod sursa(job #315882)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 17 mai 2009 16:29:21
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <cstdio>
#include <cstring>

#define file_in "next.in"
#define file_out "next.out"

#define BASE 10

#define Nmax 2000222

int a[Nmax],rez[Nmax];
long long d;
int n,r,x;

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

inline int mod(int A[], int B)   
{   
      int i, t = 0;   
      for (i = A[0]; i > 0; i--)   
              t = (t * 10 + A[i]) % B;   
      return t;   
}  

  
inline void ADD(int A[], int B[])   
{   
    int i, t = 0;   
    for (i = 1; i <= A[0] || i <= B[0] || t; ++i, t /= BASE)   
        A[i] = (t += A[i] + B[i]) % BASE;   
    A[0] = i - 1;   
}   
  
inline void init(int cif)   
{int i,t=0;   
 for(i=1;i<=rez[0]||t;++i)   
    { t+=rez[i]*cif;   
      rez[i]=t%BASE;   
      t/=BASE;   
    }   
  
    rez[0]=i-1;   
  
  
}   



void citire()   
{   
    int i, j, l;   
    char s[Nmax];   
  
    scanf("%s\n", s);   
    l = strlen(s);   
    for (i = 1; i <= l; i ++)   
    {   
        ++a[0];   
        //for (j = 8; j >= 0; --j)   
            if (l - i>= 0)   
                a[a[0]] = a[a[0]] * 10 + s[l - i] - '0';   
    }   
    scanf("%lld", &d);
}   



int main()
{
	freopen(file_in,"r",stdin);
		
	citire();
	r=mod(a,d);
	x=(d-r)%d;
	//init(x);
	rez[0]=rez[1]=1;
	init(x);
	ADD(a,rez);
	freopen(file_out,"w",stdout);
	scrie(a);
	//printf("%d", x);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}