Cod sursa(job #1239245)

Utilizator zhm248Mustatea Radu zhm248 Data 8 octombrie 2014 16:51:21
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000005];
const int MAX_DIGITS=1000010;
const int BASE=10;
class HugeN
{
    private:
        int x[MAX_DIGITS];
    public:
        HugeN()
        {
            memset(x,0,sizeof(x));
            x[0]=1;
        }
        HugeN(long long n)
        {
            memset(x,0,sizeof(x));
            x[0]=0;
            do
            {
                x[++x[0]]=n%10;
                n=n/10;
            }while(n);
        }
        HugeN(char *s)
        {
            memset(x,0,sizeof(x));
            int k=strlen(s);
            x[0]=k;
            for(int i=k-1;i>=0;i--)
                x[k-i]=s[i]-'0';
        }
        HugeN (const HugeN&other)
        {
            memcpy(x,other.x,sizeof(x));
        }
        void print()
        {
            for(int i=x[0];i>=1;i--)
                printf("%d",x[i]);
            printf("\n");
        }
        long long operator%(long long k);
        HugeN& operator+=(long long k);
};

long long HugeN::operator %(long long k)
{
    long long r=0;
    int i;
    for(i=x[0];i>0;i--)
    {
        r=r*10+x[i];
        r=r%k;
    }
    return r;
}

HugeN& HugeN:: operator +=(long long k)
{
    int i;
    long long t=k;
    for(i=1;i<=x[0];++i)
    {
        t=t+x[i];
        x[i]=t%10;
        t=t/10;
    }
    while(t)
    {
        x[0]++;
        x[x[0]]=t%10;
        t=t/10;
    }
    return *this;
}

int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d,r;
    scanf("%s",s);
    scanf("%lld",&d);
    HugeN a(s);
    r=a%d;
    d=d-r;
    if(r==0)
    a.print();
    else
    {
    a+=d;
    a.print();
    }
    return 0;
}