Cod sursa(job #313748)

Utilizator DastasIonescu Vlad Dastas Data 9 mai 2009 17:09:44
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <cstring>

using namespace std;

const int maxcif = 1000005;

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

int p[maxcif], bigdiff[60];
char buf[maxcif];
long long d;

void read()
{
    in >> buf;
    in >> d;

    int n = strlen(buf);

    for ( int i = n - 1; i >= 0; --i )
        p[ ++p[0] ] = buf[i] - '0';
}

long long getmod()
{
    long long t = 0;

    for ( int i = p[0]; i > 0; --i )
        t = (long long)((long long)t * 10LL + p[i]) % d;

    return t;
}

void makebig(long long t)
{
    while ( t > 0 )
    {
        bigdiff[ ++bigdiff[0] ] = t % 10LL;

        t /= 10LL;
    }
}

void add()
{
    int s = 0, c = 0;

    int t = p[0];
    p[0] = 0;
    for ( int i = 1; i <= t || i <= bigdiff[0] || c; ++i )
    {
        s = p[i] + bigdiff[i] + c;

        p[ ++p[0] ] = s % 10;

        c = s / 10;
    }
}

void print()
{
    for ( int i = p[0]; i > 0; --i )
        out << p[i];
}

int main()
{
    read();

    long long diff = d - getmod();

    makebig(diff % d);

    add();

    print();

    return 0;
}