Cod sursa(job #2614970)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 12 mai 2020 23:06:58
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream f("next.in");
ofstream g("next.out");

char n[1000005];
long long d;
int lgn;

void adunare(char a[1000005], int &lg, long long x)
{
    long long t = x;
    for (int i=1; i<=lg; i++)
    {
        t += a[i];
        a[i] = t % 10;
        t /= 10;
    }
    while (t)
    {
        lg++, a[lg] = t;
        t /= 10;
    }
}

void impartire(char a[1000005], int &lg, long long x, long long &r)
{
    r = 0;
    for (int i=lg; i; i--)
    {
        r = r * 10 + a[i];
        a[i] = r / x;
        r = r % x;
    }
    while (a[lg] == 0 && lg > 1)
        lg--;
}

void inmultire(char a[1000005], int &lg, long long x)
{
    long long t = 0;
    for (int i=1; i<=lg; i++)
    {
        t += x * a[i];
        a[i] = t % 10;
        t /= 10;
    }
    while (t)
    {
        lg++, a[lg] = t % 10;
        t /= 10;
    }
}

int main()
{
    f >> n+1 >> d;

    lgn = strlen(n+1);

    for (int i=1; i<=lgn; i++)
        n[i] -= '0';

    for (int i=1, lg=lgn/2; i<=lg; i++)
        swap(n[i], n[lgn-i+1]);

    long long r; impartire(n, lgn, d, r);
    if (r) adunare(n, lgn, 1);
    inmultire(n, lgn, d);

    for (int i=lgn; i; i--)
        g << int(n[i]);

    return 0;
}