Cod sursa(job #44708)
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define cmax 1000005
using namespace std;
char ch;
int a[cmax],b[cmax],n;
long long d;
int cifra(char x) {
if(x >= '0' && x <= '9') return 1;
else return 0;
}
long long rest(int a[],long long r) {
int i;
long long t = 0;
for(i = a[0]; i >= 1; i--) t = (long long)((long long)t * 10 + a[i]) % r;
return t;
}
void put(int a[],long long v) {
memset(a,0,sizeof(a));
do {
a[++a[0]] = (long long)v % 10;
v = (long long) v / 10;
} while(v > 0);
}
void show(int a[]) {
for(int i = a[0]; i >= 1; i--) printf("%d",a[i]);
printf("\n");
}
void add(int a[],int b[]) {
int i,t = 0;
for(i = 1; i <= a[0] || i <= b[0] || t > 0; i++) {
t += a[i] + b[i];
a[i] = t % 10;
t /= 10;
if(i > a[0]) a[0] = i;
}
}
int main() {
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
memset(a,0,sizeof(a));
while(1) {
scanf("%c",&ch);
if(cifra(ch)) a[++a[0]] = int(ch - '0');
else break;
}
reverse(a + 1, a + a[0] + 1);
scanf("\n");
scanf("%lld",&d);
long long r = rest(a,d);
d = (long long) d - r;
if(r > 0) {
put(b,d);
add(a,b);
}
show(a);
return 0;
}