Cod sursa(job #1059699)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 16 decembrie 2013 21:29:21
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <algorithm>
#define Nmax 1000005

using namespace std;

int a[Nmax],aux[Nmax];
long long D;

inline void Convert(long long x)
{
    while(x>0)
    {
        aux[++aux[0]]=x%10;
        x/=10;
    }
}

inline void Read()
{
    int i,val,j;
    char sir[Nmax];
    freopen ("next.in","r",stdin);
    scanf("%s", sir);
    for(i=0;sir[i]!='\0';++i)
        a[++a[0]]=sir[i]-'0';
    i=1; j=a[0];
    while(i<j)
    {
        val=a[i]; a[i]=a[j]; a[j]=val;
        ++i; --j;
    }
    scanf("%lld", &D);
}

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

void Aduna(int A[],int len1, int B[],int len2)
{
      int i, t = 0;
      for (i=1; i<=len1 || i<=len2 || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}

inline void Solve()
{
    int i;
    long long rest;
    rest=Modulo(a,a[0],D);
    if(rest)
    {
        rest=D-rest;
        Convert(rest);
        Aduna(a,a[0],aux,aux[0]);
    }
    freopen ("next.out","w",stdout);
    for(i=a[0];i>0;--i)
        printf("%d", a[i]);
    printf("\n");
}

int main()
{
    Read();
    Solve();
    return 0;
}