Cod sursa(job #420636)

Utilizator SpiderManSimoiu Robert SpiderMan Data 20 martie 2010 10:43:29
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
using namespace std;

#define MAX 1000000

ifstream f("next.in");
ofstream g("next.out");

short N[MAX],T[MAX];
char n[MAX];
long long D;
long long k;

void add(short A[], short 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(short A[], short B[])
{
    int i, t = 0;
    for (i = 1; i <= A[0]; i++)
        A[i] += (t = (A[i] -= ((i <= B[0]) ? B[i] : 0) + t) < 0) * 10;
    for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
int mod(short A[], long long B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % B;
      return t;
}
void citire(short x[],char a[])
{
    x[0]=strlen(a);
    for (int  i = x[0] -1; i >= 0; --i )
        x[i+1]=a[x[0]-i-1] - '0';
}
void afis(short x[])
{
    for (int i=x[0];i>0;i--) g<<x[i];
}
int main()
{
     f>>n;
     f>>D;
     citire(N,n);
     //citire(D,d);
     k = mod(N,D);
     //sprintf( t, "%d", k );
     //citire(T,t);
     //atr(D,K);
     //sub(K,T);
     long long J=D-k;
     k = J % D;
     sprintf( n, "%lld", k );
     //memset(T,0,T[0]);
     citire(T,n);
     add(N,T);
     afis(N);
     return 0;
}