Cod sursa(job #37471)
#include<stdio.h>
#include<string.h>
char s[1000010];
int d;
int n[1000010],o[1000010],l[1000010],k,i,one[]={1,1};
void add(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;
}
void div(int A[], int B)
{
int i, t = 0;
for (i = A[0]; i > 0; i--, t %= B)
A[i] = (t = t * 10 + A[i]) / B;
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void mul(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
void print(int x[])
{
for (int i=x[0];i>=1;i--)
printf("%ld",x[i]);
printf("\n");
}
int comp(int a[], int b[])
{
if (a[0]!=b[0]) return -1;
for (int i=1;i<=a[0];i++)
if (a[i]!=b[i]) return -1;
return 0;
}
int main()
{
freopen ("next.in","rt",stdin);
freopen ("next.out","wt",stdout);
scanf("%s",&s);
scanf("%ld",&d);
k=strlen(s);
n[0]=k;
l[0]=k;
for (i=k-1;i>=0;i--)
n[k-i]=s[i]-'0',l[k-i]=s[i]-'0';
div(l,d);
for (i=0;i<=l[0];i++)
o[i]=l[i];
mul(l,d);
if (comp(l,n)==0)
print(n);
else
{
add(o,one);
mul(o,d);
print(o);
}
return 0;
}