Pagini recente » Cod sursa (job #38310) | Cod sursa (job #1594813) | Cod sursa (job #1953212) | Cod sursa (job #1446803) | Cod sursa (job #1778106)
#include <cstdio>
#include <cstring>
#include <fstream>
using namespace std;
const int MAX_DIGITS=1000000;
const int BASE=10;
ofstream out("next.out");
class HugeN
{
private:
int x0;
char x[MAX_DIGITS+5];
public:
HugeN()
{
x0=0;
}
HugeN(long long nr)
{
x0=0;
do
{
x[++x0]=nr%10;
nr/=BASE;
}
while(nr);
}
HugeN(char *s)
{
x0=strlen(s);
for(int i=1; i<=x0; i++)
x[i]=s[x0-i]-'0';
}
void read()
{
x0=0;
char c;
while (scanf("%c",&c)!=EOF && c!='\n')
{
c=c-'0';
x[++x0]=c;
}
for (int i=1; i<=x0/2; i++)
{
char aux;
aux=x[i];
x[i]=x[x0-i+1];
x[x0-i+1]=aux;
}
}
void print()
{
for (int i=x0; i>=1; i--)
out<<(int)x[i];
}
HugeN operator += (const HugeN &other);
long long operator % (long long k);
};
HugeN HugeN::operator += (const HugeN &other)
{
///x=x+other.x
x0=x0>other.x0 ? x0 : other.x0;
int tr=0, aux, i;
for(int i=1; i<=x0; i++)
{
aux=x[i]+other.x[i]+tr;
x[i]=aux%BASE;
tr=aux/BASE;
}
if(tr)
x[(int)++x0]=tr;
return *this;
}
long long HugeN::operator % (long long k)
{
long long r=0;
for(int i=x0; i>=1; i--)
r=(r*10+x[i])%k;
return r;
}
int main()
{
freopen("next.in","r",stdin);
long long k, r;
HugeN n;
n.read();
scanf("%lld", &k);
r=n%k;
if(r==0)
r=k;
r=k-r;
HugeN x(r);
n+=x;
n.print();
return 0;
}