Pagini recente » Borderou de evaluare (job #2309676) | Borderou de evaluare (job #1569376) | Monitorul de evaluare | Cod sursa (job #3365244) | Cod sursa (job #3366644)
#include <cctype>
#include <cstdio>
#include <cstring>
#define MAXDIGITS 1000000
#define MAXDIGITSD 16
struct inputBuffer {
int cr;
char chr[MAXDIGITS + MAXDIGITSD + 1];
inline void fillBuf(FILE *fin) {
std::fread(chr, sizeof(char), MAXDIGITS + MAXDIGITSD + 1, fin);
cr = 0;
}
};
inputBuffer in;
inline int readHuge(char v[], inputBuffer &in, FILE *fin) {
in.fillBuf(fin);
int i = 0;
while (in.chr[in.cr] != '\n') {
v[i++] = in.chr[in.cr++];
}
return i;
}
char nr[MAXDIGITS];
int main() {
FILE *fout, *fin;
fin = fopen("next.in", "r");
fout = fopen("next.out", "w");
unsigned long long d = 0;
unsigned __int128 mod;
int n, i;
n = readHuge(nr, in, fin);
in.cr++;
while (isdigit(in.chr[in.cr]))
d = d * 10 + in.chr[in.cr++] - '0';
mod = 0;
for (i = 0; i + 4 <= n; i += 4)
mod = (mod * 10000 + (nr[i] - '0') * 1000 + (nr[i + 1] - '0') * 100 +
(nr[i + 2] - '0') * 10 + (nr[i + 3] - '0')) %
d;
for (i = i == 0 ? i : i + 1; i < n; i++)
mod = (mod * 10 + nr[i] - '0') % d;
mod = (d - mod) % d;
unsigned long long t = 0;
for (int i = n - 1; i >= 0 && (mod || t); i--) {
t = nr[i] - '0' + (t % 10) + mod % 10;
nr[i] = t % 10 + '0';
t /= 10;
mod /= 10;
}
if (mod || t) {
fputc('1', fout);
}
fwrite(nr, sizeof(char), n, fout);
return 0;
}