Cod sursa(job #38943)

Utilizator crawlerPuni Andrei Paul crawler Data 26 martie 2007 11:53:31
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <string.h>

#define BASE  10

typedef long long lint;

void add(lint A[], lint B)
 {  
     int i, t = 0;  

     A[1] += B;

     for (i = 1; i <= A[0] || t; ++i, t /= 10)
        if(A[i] >= BASE)
         {
          A[i+1] += A[i] / BASE;
          if(i+1 > A[0])
           ++A[0];

          A[i] %= BASE;
         }
          else
         break;
 }

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


lint a[1000002];
char buf[1000002];

int main()
 {
  freopen("next.in","r",stdin);
  freopen("next.out","w",stdout);

  fgets(buf,1000000,stdin);

  lint D,i;

  scanf("%lld", &D);

  buf[strlen(buf)-1] = 0;

  for(i=strlen(buf)-1;i>=0;--i)
   a[++a[0]] = buf[i]  - 48;

  D -= mod(a,D);

  add(a,D);

  printf("%lld", a[a[0]]);

  for(i=a[0]-1;i>0;--i)
   printf("%lld", a[i]);

  return 0;
 }