Cod sursa(job #2130684)

Utilizator lilipopliliana arici lilipop Data 13 februarie 2018 20:28:47
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
long long d;

int a[100005], c[100005], cn, r, b[100005], bn, v[100005], j;
char an[100005];
/*void impart (int a[], int an, long long d, int b[], int &bn, int &r)
{
    int i = 1, x;
    x = a[i];
    while (x < d)
        x = x * 10 + a[++i];
    bn = 0;
    while (i < an)
        {
            b[++bn] = x / d;
           x = (x % d) * 10 + a[++i];
        }
    b[++bn] = x / d;
    r = x - b[bn] * d;
}
void adun (int a[], int an, int b[], int bn, int c[], int &cn)
{
    int i, x, t;
    if (an > bn)
        for(i = bn + 1; i <= an; i++)
            b[i] = 0;
            else for (i = an + 1; i <= bn; i++)
                a[i] = 0;
        cn = an > bn ? an : bn;
        t = 0;
        for (i = 1; i <= cn; i++)
            {
                x = a[i] + b[i] + t;
                if (x >= 10)
                    {
                        c[i] = x % 10;
                        t = 1;
                    }
                else {
                        c[i] = x;
                        t = 0;
                     }
            }
        if (t == 1)
        c[++cn] = 1;

}
*/
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;
}
int mod(int A[], int B)
{
      int i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % B;
      return t;
}
int main()
{
int i;
ifstream f("next.in");
ofstream g("next.out");
f >> an;
//for (i = 1; i <= an; i++)
   // f >> a[i];
f >> d;
a[0]=strlen(an);
for (i=0;i<a[0];i++)
    a[i+1]=an[i]-48;
reverse(a+1,a+a[0]+1);
r=mod(a, d);
if (r == 0)
    for (i = 1; i <= a[0]; i++)
    g << a[i];
else
    {
        //reverse (a + 1, a + a[0] + 1);
        r = d - r;
        j = 0;
        while (r != 0)
            {
                v[++j] = r % 10;
                r = r / 10;
            }
v[0]=j;
adun (a,v);
    }
for (i = a[0]; i >= 1; i--)
   g << a[i];
f.close();
g.close();
return 0;
}