Pagini recente » Cod sursa (job #3135935) | Cod sursa (job #1910134) | Cod sursa (job #545200) | Cod sursa (job #1892481) | Cod sursa (job #2440104)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_DIGITS=1000005;
class HugeN
{
private:
int x[MAX_DIGITS];
public:
HugeN()
{
memset(x,0,sizeof(x));
}
HugeN(long long a)
{
do
{
x[++x[0]]=a%10;
a=a/10;
}
while(a);
}
HugeN(char s[MAX_DIGITS])
{
int i,n;
memset(x,0,sizeof(x));
n=strlen(s);
x[0]=n;
for(i=n-1;i>=0;i--)
x[n-i]=s[i]-'0';
}
void print()
{
int i;
for(i=x[0];i>=1;i--)
printf("%d",x[i]);
}
HugeN operator/(long long k);
long long operator%(long long k);
HugeN operator+=(const HugeN &other);
HugeN operator-=(const HugeN &other);
};
HugeN HugeN :: operator-=(const HugeN &other)
{
int aux,impr=0,i;
for(i=1;i<=x[0];i++)
{
aux=x[i]-other.x[i]-impr;
if(aux<0)
{
aux=aux+10;
impr=1;
}
else
impr=0;
x[i]=aux;
}
while(x[x[0]]==0 && x[0]>1)
x[0]--;
return (*this);
}
HugeN HugeN :: operator+=(const HugeN &other)
{
int i,aux,tr=0;
x[0]=max(x[0],other.x[0]);
for(i=1;i<=x[0];i++)
{
aux=x[i]+other.x[i]+tr;
x[i]=aux%10;
tr=aux/10;
}
if(tr)
x[++x[0]]=tr;
return (*this);
}
HugeN HugeN :: operator/(long long k)
{
HugeN c;
int i;
long long r=0;
c.x[0]=x[0];
for(i=c.x[0];i>=1;i--)
{
r=r*10+x[i];
c.x[i]=r/k;
r=r%k;
}
while(c.x[c.x[0]]==0 && c.x[0]>1)
c.x[0]--;
return c;
}
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];
r=r%k;
}
return r;
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
int l;
long long d,r;
char s[MAX_DIGITS];
fgets(s,MAX_DIGITS,stdin);
l=strlen(s);
s[l-1]=NULL;
HugeN a(s),c;
scanf("%lld",&d);
r=a%d;
if(r!=0)
{
HugeN rest(r);
a-=rest;
a+=d;
}
a.print();
return 0;
}