Pagini recente » Cod sursa (job #2180939) | Cod sursa (job #1642284) | Cod sursa (job #2180444) | Cod sursa (job #2739932) | Cod sursa (job #1238729)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000005];
const int MAX_DIGITS=1000010;
const int BASE=10;
class HugeN
{
private:
int x[MAX_DIGITS];
public:
HugeN()
{
memset(x,0,sizeof(x));
x[0]=1;
}
HugeN(long long n)
{
memset(x,0,sizeof(x));
x[0]=0;
do
{
x[++x[0]]=n%10;
n=n/10;
}while(n);
}
HugeN(char *s)
{
memset(x,0,sizeof(x));
int k=strlen(s);
x[0]=k;
for(int i=k-1;i>=0;i--)
x[k-i]=s[i]-'0';
}
HugeN (const HugeN&other)
{
memcpy(x,other.x,sizeof(x));
}
void print()
{
for(int i=x[0];i>=1;i--)
printf("%d",x[i]);
printf("\n");
}
long long operator%(long long k);
HugeN operator+=(const HugeN&other);
};
long long HugeN::operator %(long long k)
{
long long r=0;
int i;
for(i=x[0];i>0;i--)
{
r=r*10+x[i];
r=r%k;
}
return r;
}
HugeN HugeN:: operator +=(const HugeN&other)
{
int i,t;
x[0]=max(x[0],other.x[0]);
for(t=0,i=1;i<=x[0];i++)
{
t=x[i]+other.x[i]+t;
x[i]=t%10;
t/=10;
}
if(t)
x[0]++,x[x[0]]=t;
return *this;
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
long long d,r;
scanf("%s",s);
scanf("%lld",&d);
HugeN a(s);
r=a%d;
d=d-r;
HugeN b(d);
a+=b;
a.print();
return 0;
}