Cod sursa(job #313735)

Utilizator DastasIonescu Vlad Dastas Data 9 mai 2009 17:00:57
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <cstring>

const int maxcif = 1000005;

FILE *in = fopen("next.in","r"), *out = fopen("next.out","w");

char p[maxcif], bigdiff[maxcif], added[maxcif];
long long d;

void read()
{
    char buf[maxcif];

    fscanf(in, "%s\n", buf);
    fscanf(in, "%lld", &d);

    int n = strlen(buf);

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

    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;

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

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

        c = s / 10;
    }
}

void print()
{
    for ( int i = added[0]; i > 0; --i )
        fprintf(out, "%d", added[i]);
}

int main()
{
    read();

    long long diff = d - getmod();

    makebig(diff % d);

    add();

    print();

    return 0;
}