Cod sursa(job #39222)

Utilizator vlad_popaVlad Popa vlad_popa Data 26 martie 2007 15:32:40
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <string>

#define FIN "next.in"
#define FOUT "next.out"
#define NMAX 1000001

int N[NMAX], val[21];
long long D, R;
char s[NMAX + 10];

void read ()
{
  int ct = 0;
  
  gets (s);

  N[0] = strlen (s);

  for (int i = N[0] - 1; i >= 0; -- i)
    N[++ ct] = s[i] - '0';

  scanf ("%lld", &D);
}

void convert (long long x)
{
  int ct = 0;

  while (x)
   {
     val[++ct] = x % 10;
     x /= 10;
   }

  val[0] = ct;
}

void adun (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;
}

long long mod (int A[], long long B)
{
  int i;
  long long t = 0;

  for (i = A[0]; i > 0; -- i)
    t = (t * 10 + A[i]) % B;

  return t;
}

void solve ()
{
  long long R = mod (N, D);

  D -= R;
  convert (D);
  adun (N, val);

  for (int i = N[0]; i >= 1; -- i)
    printf ("%d", N[i]);
  printf ("\n");
}

int
 main ()
{
  freopen (FIN, "rt", stdin);
  freopen (FOUT, "wt", stdout);

  read ();
  solve ();

  return 0;
}