Cod sursa(job #1238729)

Utilizator zhm248Mustatea Radu zhm248 Data 7 octombrie 2014 16:54:21
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 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+=(const HugeN&other);
};
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 +=(const HugeN&other)
{
    int i,t;
    x[0]=max(x[0],other.x[0]);
    for(t=0,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;
}

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;
    HugeN b(d);
    a+=b;
    a.print();
    return 0;
}