Cod sursa(job #1748271)

Utilizator sebi212Sebi nechita sebi212 Data 26 august 2016 11:57:07
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int NMAXDIGITS=5000005;
char s[1000005];
class HugeN
{
  private: int x[NMAXDIGITS];
  public:  HugeN()
           {
               memset(x,0,sizeof(x));
               x[0]=1;
           }
           HugeN(char *s)
           {
               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);

    HugeN N(s);
    scanf("%I64d",&D);
    r=N%D;
    if(r)
    N+=D-r;
    N.print();
    return 0;
}