Cod sursa(job #1748238)

Utilizator cyg_ieeuVasile Radu-Andrei cyg_ieeu Data 26 august 2016 11:50:00
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int nmax = 1000005;
char s[nmax];

class HugeN
{
    private:int x[nmax];
    public: HugeN()
            {
                memset(x,0,sizeof(x));
                x[0] = 1;
            }
            HugeN(char *s)
            {
                int l = strlen(s);
                memset(x,0,sizeof(x));
                x[0] = l;
                for(int i = l - 1;i >= 0;i--)
                    x[l - i] = s[i] - 48;
            }
            long long operator%(long long k);
            HugeN operator+=(long long k);
            void print()
            {
                for(int i = x[0];i >= 1;i--)
                    printf("%d",x[i]);
                printf("\n");
            }
};


long long HugeN::operator%(long long k)
{
    long long r = 0;
    int i;
    for(i = x[0];i >= 1;i--)
    {
        r = r * 10 + x[i];
        r = r % k;
    }
    return r;
}
HugeN HugeN::operator+=(long long k)
{
    long long tr = k,aux;
    for(int i = 1;i <= x[0];++i)
    {
        aux = x[i] + tr;
        x[i] = aux % 10;
        tr = aux / 10;
    }
    while(tr)
    {
        x[0]++;
        x[x[0]]= tr % 10;
        tr = tr / 10;
    }
    return *this;
}
int main()
{
    freopen("next.in", "r",stdin);
    freopen("next.out", "w",stdout);
    long long d,r;
    gets(s);
    scanf("%lld", &d);
    HugeN N(s);
    r = N % d;
    if(r)
        N += d - r;
    N.print();
    return 0;
}