Cod sursa(job #338522)
#include <iostream.h>
#include <stdio.h>
#include <fstream.h>
#define LG_MAX 1000001
typedef int BigNumber[LG_MAX];
BigNumber N,nr; //M este rezultatul; M=N+( (D-R) %D ) %10
long long D,i;
char s[LG_MAX],temp;
void div (BigNumber a, long 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 add (BigNumber a, BigNumber 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 mul (BigNumber a, long 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;
}
int main()
{
ifstream f("next.in");
ofstream g("next.out");
i=0;
while (!f.eof() )
{
f.get(temp); //citesc din fisier caracter cu caracter
if ( (temp=='\r') || (temp=='\n') || (!isdigit(temp)) ) break;
s[i]=temp;
i++;
}
s[i]='\0'; //inchei sirul cu NULL
N[0]=strlen(s); //calculez lungimea sirului
for (i=N[0]-1;i>=0;i--)
N[N[0]-i]=s[i]-'0';
for (i=N[0]+1;i<LG_MAX;i++)
N[i]=0;
f>>D;
f.close();
div (N,D);
nr[0]=1;
nr[1]=1;
nr[2]='\0';
add(N,nr);
mul (N,D);
for (i=N[0];i>=1;i--)
g<<N[i];
g.close();
return 0;
}