Pagini recente » Cod sursa (job #1718534) | Cod sursa (job #882204) | Cod sursa (job #2921412) | Cod sursa (job #1192981) | Cod sursa (job #1777286)
#include <cstdio>
#include <cstring>
using namespace std;
const int maxDigits=1000000;
class HugeN{
private:
int x0;
char x[maxDigits];
public:
HugeN();
HugeN(long long k);
void read();
void print();
long long operator % (long long k);
HugeN operator += (long long k);
};
HugeN::HugeN(){
memset(x,0,sizeof(x));
x0=0;
}
HugeN::HugeN(long long k){
memset(x,0,sizeof(x));
x0=0;
do{
x[++x0]=k%10;
k/=10;
} while (k);
}
void HugeN::read(){
memset(x,0,sizeof(x));
x0=0;
char c;
while (scanf("%c",&c)!=EOF && c!='\n'){
c=c-'0';
x[(int)++x0]=c;
}
for (int i=1;i<=(x0>>1);i++){
char aux;
aux=x[i];
x[i]=x[x0-i+1];
x[x0-i+1]=aux;
}
}
void HugeN::print(){
for (int i=x0;i>=1;i--){
printf("%d",(int)x[i]);
}
}
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;
}
HugeN HugeN::operator += (long long k){
int i,tr,aux,c;
i=1;aux=0;
do{
c=k%10;
aux++;
x[i]=c+x[i];
k=k/10;
} while (k>0);
x0=(x0 > aux ? x0 : aux);
tr=0;
for (int i=1;i<=x0;i++){
aux=x[i]+tr;
x[i]=aux%10;
tr=aux/10;
}
while (tr){
x[++x0]=tr%10;
tr=tr/10;
}
return *this;
}
int main(){
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
long long k,r;
HugeN n;
n.read();
scanf("%lld",&k);
r=n%k;
if (r==0){
r=k;
}
r=k-r;
n+=r;
n.print();
return 0;
}