Pagini recente » Cod sursa (job #142129) | Cod sursa (job #2968393) | Cod sursa (job #3166783) | Cod sursa (job #1057474) | Cod sursa (job #1287699)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define MAX_DIG 1000005
#define BASE 10
typedef long long LL;
char s[MAX_DIG];
class Huge {
private:
int dig;
char x[MAX_DIG];
public:
Huge();
Huge(const char s[]);
Huge(LL n);
void PRT();
LL operator %(const LL k);
void operator +=(const Huge &other);
};
Huge::Huge() {
memset(x, 0, sizeof(x));
dig = 1;
}
Huge::Huge(const char s[]) {
int i;
dig = strlen(s);
for(i = 0; i < dig; i++)
x[dig - i] = s[i] - '0';
}
Huge::Huge(LL n) {
memset(x, 0, sizeof(x));
dig = 0;
do {
x[++dig] = n % BASE;
n /= BASE;
} while(n);
}
void Huge::PRT() {
int i;
for(i = dig; i; i--)
printf("%d", x[i]);
printf("\n");
}
LL Huge::operator %(const LL k) {
int i;
LL r;
for(i = dig, r = 0; i; i--) {
r = r * BASE + x[i];
r %= k;
}
return r;
}
void Huge::operator +=(const Huge &other) {
int i, t;
dig = max(dig, other.dig);
for(i = 1, t = 0; i <= dig; i++) {
x[i] += other.x[i] + t;
t = 0;
if(x[i] >= BASE)
x[i] -= BASE, t = 1;
}
if(t)
x[++dig] = t;
}
int main() {
freopen("next.in", "r", stdin);
freopen("next.out", "w", stdout);
int lg;
LL k, r;
gets(s);
lg = strlen(s);
if(s[lg-1] == 10)
s[lg-1] = 0;
Huge N(s);
scanf("%lld", &k);
r = N%k;
if(r == 0) {
N.PRT();
return 0;
}
r = k - r;
Huge Add(r);
N += Add;
N.PRT();
return 0;
}