Cod sursa(job #1236792)

Utilizator raduchirilaChirila Radu Razvan raduchirila Data 2 octombrie 2014 16:41:20
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_digits=100020;
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/=10;
            }while(n);
        }
        HugeN(char *s)
        {
            memset(x,0,sizeof(x));
            int n=strlen(s),i;
            x[0]=n;
            for(i=n-1;i>=0;i--)
            {
                x[n-i]=s[i]-'0';
            }
        }
        HugeN(const HugeN&other)
        {
            memcpy(x,other.x,sizeof(other.x));
        }

        int cmp(const HugeN&other)
        {
            if(x[0]<other.x[0]) return -1;
            else if(x[0]>other.x[0]) return 1;
            for(int i=x[0];i>0;i--)
                if(x[i]<other.x[i]) return -1;
                else if(x[i]>other.x[i]) return 1;
            return 0;
        }
        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);
};

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

long long HugeN::operator %(long long k)
{
    int i;
    long long r=0;
    for(i=x[0];i>0;i--)
    {
        r=(long long)r*10+x[i];
        r%=k;
    }
    return r;
}
char s[1000005];
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    scanf("%s",s);
    HugeN n(s);
    long long d,r;
    scanf("%I64d",&d);
    r=n%d;
    if(r)
    {
        d=d-r;
        n+=d;
    }
    n.print();
    return 0;
}