Pagini recente » Cod sursa (job #1894759) | Cod sursa (job #1244270) | Cod sursa (job #507192) | Cod sursa (job #693123) | Cod sursa (job #2100492)
#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;
}