Pagini recente » Cod sursa (job #2273418) | Cod sursa (job #75176) | Cod sursa (job #2797076) | Cod sursa (job #209847) | Cod sursa (job #1593769)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("next.in");
const int MAXDIGITS=10005;
const int Base=1000000;
char s[MAXDIGITS];
struct NumarMare
{
int v[MAXDIGITS];
NumarMare()
{
for(int i=0;i<MAXDIGITS;i++)
v[i]=0;
}
NumarMare(long long x)
{
for(int i=0;i<MAXDIGITS;++i)
v[i]=0;
if(x==0)
v[0]++;
while(x>0)
{
v[++v[0]]=x%Base;
x/=Base;
}
}
NumarMare(char *s)
{
for(int i=0;i<MAXDIGITS;i++)
v[i]=0;
int n=strlen(s),nr=0,j;
for(int i=n-1;i>=0;i-=6)
{
nr=0;
for(j=max(0,i-5);j<=i;j++)
nr=nr*10+s[j]-'0';
v[++v[0]]=nr;
}
}
inline void Afisare()
{
printf("%d",v[v[0]]);
for(int i=v[0]-1;i>=1;i--)
printf("%06d",v[i]);
}
};
NumarMare operator + (NumarMare A,NumarMare B)
{
NumarMare C;
int t=0,i,d;
d=max(A.v[0],B.v[0]);
for(i=1;i<=d || t>0;i++)
{
t+=A.v[i]+B.v[i];
C.v[i]=t%Base;
t/=Base;
}
C.v[0]=i-1;
return C;
}
inline int operator % (NumarMare A,long long x)
{
int rest=0;
for(int i=A.v[0];i>=1;i--)
rest=(rest*Base+A.v[i])%x;
return rest;
}
int main()
{
freopen("next.out","w",stdout);
long long d;
f>>(s+1)>>d;
NumarMare B(s+1);
long long x=(d-(B%d));
NumarMare V=B+x;
V.Afisare();
return 0;
}