Cod sursa(job #1748314)

Utilizator MarutBrabete Marius Stelian Marut Data 26 august 2016 12:08:49
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NMAXDIGITS=1000005;
char s[1000005];
class HugeN
{
    private: int x[NMAXDIGITS];
    public: HugeN()
            {
                memset(x,0,sizeof(x));
                x[0]=1;
            }
            HugeN(char*b)
            {
                int l=strlen(s);
                memset(x,0,sizeof(x));
                x[0]=l;
                for(int i=l-1;i>=0;--i)
                    x[l-i]=s[i]-48;
            }
            long long operator % (long long k);
            HugeN operator +=(long long k);
            void print()
            {
                for(int i=x[0];i>=1;--i)
                    printf("%d",x[i]);
                printf("\n");
            }
};
            long long HugeN::operator %(long long k)
            {
              int i;
              long long 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 tr=k,aux;
                for(int i=1;i<=x[0];++i)
                {
                    aux=x[i]+tr;
                    x[i]=aux%10;
                    tr=aux/10;
                }
                while(tr)
                {
                    x[0]++;
                    x[x[0]]=tr%10;
                    tr=tr/10;
                }
                return *this;
            }
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d,r;
    gets(s);
    scanf("%lld",&d); //lld cand trimit
    HugeN N(s);
    r=N%d;
    if(r)
    {
        N+=d-r;
        N.print();
    }
        else N.print();
    return 0;
}