Pagini recente » Cod sursa (job #1466050) | Cod sursa (job #520926) | Cod sursa (job #207459) | Monitorul de evaluare | Cod sursa (job #1747201)
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_DIGITS = 1000500;
const int MAXN = 1000000;
char s[MAXN + 5];
class HugeN{
private: short int x[MAX_DIGITS];
public:
HugeN(){
x[0] = 1;
memset(x, 0, sizeof(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(){
for (int i = x[0]; i >= 1; i --)
printf("%d", x[i]);
printf("\n");
}
HugeN operator + (int k);
HugeN operator * (long long k);
HugeN operator / (long long k);
long long operator % (long long k);
};
HugeN HugeN::operator + (int k){
HugeN temp;
temp.x[0] = x[0];
int i, r = 0, aux;
for (i = 1; i <= temp.x[0]; i ++){
aux = x[i] + k;
temp.x[i] = aux % 10;
k = aux / 10;
}
while (k){
temp.x[++temp.x[0]] = k % 10;
k /= 10;
}
return temp;
}
HugeN HugeN::operator * (long long k){
HugeN temp;
temp.x[0] = x[0];
int i;
short int u;
long long tr = 0, aux;
for (i = 1; i <= temp.x[0]; i ++){
aux = 1LL * x[i] * k + tr;
u = aux % 10;
temp.x[i] = u;
tr = aux / 10;
}
while (tr){
u = tr % 10;
temp.x[++temp.x[0]] = u;
tr /= 10;
}
return temp;
}
HugeN HugeN::operator / (long long k){
HugeN temp;
temp.x[0] = x[0];
int i;
short int u;
long long r = 0, aux;
for (i = temp.x[0]; i >= 1; i --){
aux = r * 10 + x[i];
u = aux / k;
temp.x[i] = u;
r = aux % k;
}
while (temp.x[temp.x[0]] == 0)
temp.x[0] --;
return temp;
}
long long HugeN::operator % (long long k){
int i;
long long r = 0, aux;
for (i = x[0]; i >= 1; i --)
r = (r * 10 + x[i]) % k;
return r;
}
int main(){
freopen("next.in", "r", stdin);
freopen("next.out", "w", stdout);
int i;
long long d;
gets(s);
HugeN a(s);
scanf("%lld", &d);
if (a % d == 0){
a.print();
return 0;
}
a = a / d;
a = a + 1;
a = a * d;
a.print();
return 0;
}