Cod sursa(job #480504)
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 100000000
char sir[MAX];
int n[MAX];
long long d, rest;
int lg, i, j, k;
void adunare_nr_mic (int nr[], int x)
{
int suma_cf = 0, suma_tr = 0, cf = 0;
i = 1;
while (x && i <= nr[0])
{
suma_cf = nr[i] + (x % 10) + suma_tr;
nr[i] = suma_cf % 10;
suma_tr = suma_cf / 10;
x /= 10;
i ++;
cf ++;
}
while (suma_tr)
{
nr[i] += suma_tr;
suma_cf = nr[i];
nr[i] %= 10;
suma_tr = suma_cf / 10;
i ++;
cf ++;
}
if (cf > nr[0])
nr[0] = cf;
}
void afisare (int nr[])
{
FILE *g = fopen ("next.out","w");
for (i=nr[0]; i>=1; --i)
fprintf (g, "%d", nr[i]);
fprintf (g, "\n");
}
int mod_nr_mic (int nr[], int x)
{
int t = 0;
for (i=nr[0]; i>=1; --i)
t = (t * 10 + nr[i]) % x;
return t;
}
int scadere_nr_mic (int nr[], int x)
{
i = 1;
while (x && i <= nr[0])
{
if (nr[i] < x % 10)
{
k = i + 1;
while (!nr[k])
{
nr[k] = 9;
k ++;
}
nr[k] --;
nr[i] = nr[i] + 10 - (x % 10);
}
else
nr[i] -= (x % 10);
x /= 10;
i ++;
}
}
int main ()
{
FILE *f = fopen ("next.in","r");
fscanf (f,"%s", sir);
lg = strlen (sir);
for (i=lg-1; i>=0; --i)
{
n[0] ++;
n[n[0]] = sir[i] - '0';
}
fscanf (f,"%lld", &d);
rest = mod_nr_mic (n, d);
j = (d - rest ) % d;
adunare_nr_mic (n, j);
afisare (n);
fclose (f);
return 0;
}