Cod sursa(job #329995)
#include<fstream>
#include<cstring>
#define maxn 1000005
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
int a[maxn],b[maxn],d,i;
void add(int A[], int B[])
{
long long 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 mul(int A[],int B)
{
long long 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 div(int A[], int B)
{
long long 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]--);
}
int mod(int A[], int B)
{
long long i, t = 0;
for (i = A[0]; i > 0; i--)
t = (t * 10 + A[i]) % B;
return t;
}
int main()
{
while(1)
{
a[++a[0]]=f.get();
a[a[0]]-='0';
if(a[a[0]]<0||a[a[0]]>9)
{
a[a[0]--]=0;
break;
}
}
for(i=a[0];i;--i)
b[++b[0]]=a[i];
f>>d;
i=0;
if(mod(b,d)) i=1;
div(b,d);
memset(a,0,sizeof(a));
a[0]=a[1]=1;
if(i)add(b,a);
mul(b,d);
for(i=b[0];i;--i)
g<<b[i];
g<<"\n";
f.close();
g.close();
return 0;
}