Cod sursa(job #1236205)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 1 octombrie 2014 17:14:40
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxd=1<<10;
class hugen
{
    private:
        int x[maxd];
    public:
    hugen()
    {
        memset(x,0,sizeof(x));
        x[0]=1;
    }
    hugen(int 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));
        x[0]=strlen(s);
        for (register int i=0;i<x[0];++i)
            x[x[0]-i]=s[i]-48;
    }
    hugen(const hugen& other)
    {
        memcpy(x,other.x,sizeof(other.x));
    }
    void print()
    {
        for (register int i=x[0];i>=1;--i)
            printf("%d",x[i]);
        printf("\n");
    }
    hugen operator +=(const hugen& other);
    hugen operator *=(long long k);
    hugen operator /=(long long k);
    long long operator %(long long k);
};
hugen hugen::operator +=(const hugen&other)
{
    int t;
    t=0;
    for (register int i=1;i<=x[0];++i)
    {
        t=x[i]+other.x[i]+t;
        x[i]=t%10;
        t/=10;
    }
    if (t)
    {
        ++x[0];
        x[x[0]]-t;
    }
    return *this;
}
hugen hugen::operator *=(long long k)
{
    int t;
    t=0;
    for (register int i=1;i<=x[0];++i)
    {
        t=t+x[i]*k;
        x[i]=t%10;
        t=t/10;
    }
    while (t)
    {
        x[++x[0]]=t%10;
        t=t/10;
    }
    return *this;
}
hugen hugen::operator /=(long long k)
{
    int r=0;
    for (register int i=x[0];i>=1;--i)
    {
        r=r*10+x[i];
        x[i]=1LL*r/k;
        r=1LL*r%k;
    }
    while (x[0]>1&&!x[x[0]])
        --x[0];
    return *this;
}
long long hugen::operator %(long long k)
{
    long long r=0;
    for (register int i=x[0];i>0;--i)
    {
        r=r*10+x[i];
        r%=k;
    }
    return r;
}

int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d;
    int n;
    hugen b(1);
    char s[1000005];
    gets(s);
    hugen a(s);
    scanf("%lld",&d);
    if (a%d==0)
        d=d;
    else
    {
        a/=d;
        a+=b;
        a*=d;
    }
    a.print();
    return 0;
}