Cod sursa(job #2440108)

Utilizator cyg_alexandru546Zob Alexandru Mihai cyg_alexandru546 Data 17 iulie 2019 16:26:41
Problema Next Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_DIGITS=1000002;
const int BASE=10;
class HugeN
{
private:
    int x[MAX_DIGITS];
public:
    HugeN()
    {
        memset(x,0,sizeof(x));
        x[0]=1;
    }
    HugeN(int n)
    {
        memset(x,0,sizeof(x));
        do{
            ++x[0];
            x[x[0]]=n%10;
            n=n/10;
          }while(n>0);
    }
    HugeN(const HugeN & other)
    {
        memcpy(x,other.x,sizeof(other.x));
    }
    HugeN(char s[101])
    {
        int n,i;
        memset(x,0,sizeof(x));
        n=strlen(s);
        x[0]=n;
        for(i=n-1;i>=0;i--)
            x[n-i]=s[i]-'0';
    }
    void print()
    {
        int i;
        for(i=x[0];i>=1;i--)
        {
            cout<<x[i];
        }
        cout<<endl;
    }
    HugeN operator + (const HugeN & other);
    long long operator % (long long k);
    HugeN operator /= (long long k);
};
HugeN HugeN::operator + (const HugeN & other)
{
    int tr,i,k;
    HugeN c;
    c.x[0]=max(x[0],other.x[0]);
    tr=0;
    for(i=1;i<=c.x[0];i++)
    {
        k=x[i]+other.x[i]+tr;
        c.x[i]=k%10;
        tr=k/10;
    }
    if(tr>0)
    {
        c.x[0]++;
        k=c.x[0];
        c.x[k]=tr;
    }
    return c;
}
long long HugeN::operator % (long long k)
{
    int i,r;
    r=0;
    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 i,r;
    r=0;
    for(i=x[0];i>=1;i--)
    {
        r=r*10+x[i];
        x[i]=r/k;
        r=r%k;
    }
    while(x[0]>1 && x[x[0]]==0)
    {
        x[0]--;
    }
    return *this;
}
int main()
{
            freopen("next.in","r",stdin);
            freopen("next.out","w",stdout);
            long long d,rest,p;
            char s[MAX_DIGITS];
            cin.getline(s,MAX_DIGITS);
            HugeN a(s),b;
            scanf("%I64d",&d);
            rest=a%d;
            if(rest!=0)
            {
                p=d-rest;
                HugeN c(p);
                b=a+c;
                b.print();
            }
            else
                a.print();
            return 0;
}