Pagini recente » Cod sursa (job #1399745) | Cod sursa (job #1961609) | Cod sursa (job #2097279) | Cod sursa (job #3152893) | Cod sursa (job #1781252)
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_DIGITS=1000000;
char s[MAX_DIGITS+5];
class HugeN
{
private:
int x[MAX_DIGITS+5];
public:
HugeN()
{
x[0]=1;
for(int i=1;i<=MAX_DIGITS;i++)
x[i]=0;
}
HugeN(long long nr)
{
for(int i=0;i<=MAX_DIGITS;i++)
x[i]=0;
do{
x[++x[0]]=nr%10;
nr=nr/10;
}
while(nr);
}
HugeN(HugeN&other)
{
x[0]=1;
for(int i=1;i<=MAX_DIGITS;i++)
x[i]=0;
memcpy(x,other.x,sizeof(other.x));
}
HugeN(char *s)
{
x[0]=strlen(s);
for(int i=1;i<=x[0];i++)
x[i]=s[x[0]-i]-'0';
}
void print()
{
int i;
for(i=x[0]; i>=1; i--)
printf("%d",x[i]);
printf("\n");
}
HugeN operator+=(long long k);
long long operator%(long long k);
};
long long HugeN::operator%(long long k)
{
int i;
long long r=0;
for(i=x[0];i>=1;i--)
r=(r*10+x[i])%k;
return r;
}
HugeN HugeN::operator+=(long long k)
{
int i,tr=0,aux=0,c;
i=1;
do{
c=k%10;
aux++;
x[i]=c+x[i];
k=k/10;
i++;
}
while(k);
x[0]=max(x[0],aux);
for(i=1;i<=x[0];i++)
{
aux=x[i]+tr;
x[i]=aux%10;
tr=aux/10;
}
while(tr)
{
x[++x[0]]=tr%10;
tr=tr/10;
}
return *this;
}
/*HugeN HugeN::operator+=(long long k)
{
//HugeN other(k);
//x[0]=x[0]>other.x[0]?x[0]:other.x[0];
int tr=0,aux,i;
for(i=1;i<=x[0];i++)
{
aux=x[i]+k%10+tr;
x[i]=aux%10;
tr=aux/10;
k=k/10;
}
if(tr)
x[++x[0]]=tr;
return *this;
}*/
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
gets(s);
long long k;
scanf("%lld",&k);
HugeN n(s);
long long r;
r=n%k;
if(r==0)
n.print();
else
{
k=k-r;
n+=k;
n.print();
}
return 0;
}