Cod sursa(job #2100492)

Utilizator DafinaTrufasTrufas Dafina DafinaTrufas Data 5 ianuarie 2018 18:38:17
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
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;

}
int main()
{
 long long d;

int a[100000], an, i, c[100000], cn, r, b[100000], bn, v[100000], j;
ifstream f("next.in");
ofstream g("next.out");
f >> an;
for (i = 1; i <= an; i++)
    f >> a[i];
f >> d;

impart (a, an, d, b, bn, r);
if (r == 0)
    for (i = 1; i <= an; i++)
    g << a[i];
else
    {
        reverse (a + 1, a + an + 1);
        r = d - r;
        j = 0;
        while (r != 0)
            {
                v[++j] = r % 10;
                r = r / 10;
            }
    adun (a, an, v, j, c, cn);
    }
for (i = cn; i >= 1; i--)
   g << c[i];
f.close();
g.close();
return 0;
}