Cod sursa(job #3367412)

Utilizator Teodor94Teodor Plop Teodor94 Data 7 octombrie 2026 17:12:41
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <bits/stdc++.h>
using namespace std;

#define MAX_DIGITS 1000000

struct Huge {
    char v[MAX_DIGITS + 1];
    int n;

    Huge() {
        // Initializam numarul cu valoarea 0
        memset(v, 0, sizeof(v));
        n = 1;
    }

    void read(FILE* fin) {
        int ch, i, j;
        char aux;

        // Sarim peste spatii si linii noi
        ch = fgetc(fin);
        while (ch != EOF && !isdigit(ch))
            ch = fgetc(fin);

        // Citim cifrele
        n = 0;
        while (ch != EOF && isdigit(ch)) {
            v[n++] = ch - '0';
            ch = fgetc(fin);
        }

        // Intoarcem numarul
        i = 0;
        j = n - 1;
        while (i < j) {
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            ++i;
            --j;
        }
    }

    long long operator%(long long small) {
        long long r;
        int i;

        r = 0;
        for (i = n - 1; i >= 0; --i)
            r = (r * 10 + v[i]) % small;

        return r;
    }

    Huge& operator+=(long long small) {
        long long t;
        int i;

        t = small;
        for (i = 0; t > 0; ++i) {
            t += v[i];
            v[i] = t % 10;
            t /= 10;
        }

        if (i > n)
            n = i;

        // Intoarcem referinta la acest obiect
        return *this;
    }

    void print(FILE* fout) {
        int i;

        for (i = n - 1; i >= 0; --i)
            fputc('0' + v[i], fout);
        fputc('\n', fout);
    }
};

Huge number;

int main() {
    FILE *fin, *fout;
    fin = fopen("next.in", "r");
    fout = fopen("next.out", "w");

    long long d, r;

    number.read(fin);
    fscanf(fin, "%lld", &d);

    r = number % d;
    number += (d - r) % d;

    number.print(fout);

    fclose(fin);
    fclose(fout);
    return 0;
}