Cod sursa(job #345714)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 4 septembrie 2009 13:20:25
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <cstdio>
#include <cstring>

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

#define BASE 10

#define Nmax 1000001

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

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

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

  
inline void ADD(short int A[],short int B[])   
{   
    long long 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(long long cif)   
{long long 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()   
{   
    long long i,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);
	freopen(file_out,"w",stdout);	
	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;
}