Cod sursa(job #2916085)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 28 iulie 2022 00:01:40
Problema Next Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>

using namespace std;

ifstream fin("next.in");
ofstream fout("next.out");

const int MAX_N = 1e6 + 1e3;
int a[MAX_N + 1], b[MAX_N + 1];

void divide(int a[], int b) {
    int t = 0, i;
    for (i = a[0]; i >= 1; i--, t %= b) {
        a[i] = (t = t * 10 + a[i]) / b;
    }
    for(; a[0] > 1 && !a[a[0]]; a[0]--);
}

void add(int a[], int b) {
    int i = 1;
    while (b) {
        b += a[i];
        a[i] = b % 10;
        b /= 10;
        i++;
    }
    i--;
    if (i > a[0]) {
        a[0] = i;
    }
}

void mult(int a[], long long x) {
    long long t = 0, i = 1;
    while (i <= a[0] || t > 0) {
        t += a[i] * x;
        a[i] = t % 10;
        t /= 10;
        i++;
    }
    i--;
    if (i > a[0]) {
        a[0] = i;
    }
    for(; a[0] > 1 && !a[a[0]]; a[0]--);
}

bool comp(int a[], int b[]) {
    if (a[0] != b[0]) {
        return false;
    }
    for (int i = 1; i <= a[0]; i++) {
        if (a[i] != b[i]) {
            return false;
        }
    }
    return true;
}

void print(int a[]) {
    for (int i = a[0]; i >= 1; i--) {
        fout << a[i];
    }
}

signed main() {
    string s;
    long long d;
    fin >> s >> d;
    a[0] = s.size();
    for (int i = s.size() - 1; i >= 0; i--) {
        a[a[0] - i] = s[i] - '0';
    }
    divide(a, d);
    for (int i = 0; i <= a[0]; i++) {
        b[i] = a[i];
    }
    mult(b, d);
    a[0] = s.size();
    for (int i = s.size() - 1; i >= 0; i--) {
        a[a[0] - i] = s[i] - '0';
    }
    if (comp(a, b)) {
        print(a);
        return 0;
    }
    add(b, d);
    print(b);
    return 0;
}