Cod sursa(job #293114)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 31 martie 2009 22:44:57
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <algorithm>
using namespace std;
#define DIM 1000005
#define ll long long
int a[DIM],b[DIM];
ll r,d;
ll rest (int a[DIM],ll d)
{
    int i;
    ll t=0;
    for (i=a[0]; i; --i)
        t =(t*10+a[i])%d;
    return t;
}
void aduna (int a[DIM],int b[DIM])
{
      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;
}

int main ()
{
    freopen ("next.in","r",stdin);
    freopen ("next.out","w",stdout);
    int i;
    char ch;
    while (scanf ("%c",&ch))
    {
        if (ch=='\n' )
            break;
        b[++b[0]]=ch-'0';
    }
    a[0]=b[0]; 
    for (i=1; i<=a[0]; ++i)
        a[i]=b[b[0]-i+1];
    memset(b, 0, sizeof(b));
    scanf ("%lld",&d);
    r=rest (a,d);
    r=(d-r)%d;
    while (r)
    {
        b[++b[0]]=r%10;
        r/=10;
    }
    aduna (a,b);
    for (i=a[0]; i; --i)
        printf ("%d",a[i]);
    return 0;
}