Cod sursa(job #313763)

Utilizator DastasIonescu Vlad Dastas Data 9 mai 2009 17:29:24
Problema Next Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <cstring>

using namespace std;

const int maxcif = 1000005;

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

int *p, bigdiff[60] = {0};
char buf[maxcif];
long long d;

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

    p = new int[maxcif];
    for ( int i = 0; i < maxcif; ++i ) p[i] = 0;

    for ( int i = strlen(buf) - 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;

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

        p[i] = s % 10;

        c = s / 10;
    }

    if ( c )
        p[ ++p[0] ] = c;
}

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;
}