Cod sursa(job #1236801)

Utilizator thewildnathNathan Wildenberg thewildnath Data 2 octombrie 2014 16:53:58
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#include<string.h>

#define LMAX 1000010                 // ATENTIE!!!!!!!
#define BASE 10

class HUGE
{
    int x[LMAX];

public:

    HUGE(char c[])
    {
        x[0]=strlen(c);
        for(int i=x[0]; i; --i)
            x[i]=c[x[0]-i]-'0';
    }

    long long operator %(long long d)
    {
        long long r=0;

        for(int i=x[0]; i; --i)
        {
            r=r*10ll+(long long)x[i];
            r%=d;
        }

        return r;
    }

    HUGE& operator +=(long long d)
    {
        int i=1, r;

        while(d)
        {
            r+=d%10+x[i];
            x[i]=r%10;

            r/=10;
            d/=10;
            ++i;
        }
        while(r)
        {
            r+=x[i];
            x[i]=r%10;

            r/=10;
            ++i;
        }

        if(i-1>x[0])
            x[0]=i-1;

        return *this;
    }

    void print()
    {
        for(int i=x[0]; i; --i)
            printf("%d", x[i]);
    }
};

char aux[LMAX];

int main()
{
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);

    long long d, r;

    scanf("%s%I64d", aux, &d);

    HUGE n(aux);

    r=n%d;
    if(r)
        n+=(d-r);

    n.print();


    return 0;
}