Cod sursa(job #2440113)

Utilizator maria_neagoieMaria Neagoie maria_neagoie Data 17 iulie 2019 16:32:37
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_DIGITS=1000005;
class HugeN
{
private:
  int x[MAX_DIGITS];
public:
  HugeN()
  {
    memset(x,0,sizeof(x));
  }
  HugeN(long long a)
  {
    do
    {
      x[++x[0]]=a%10;
      a=a/10;
    }
    while(a);
  }
  HugeN(char s[MAX_DIGITS])
  {
    int i,n;
    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--)
      printf("%d",x[i]);
  }
  HugeN operator/(long long k);
  long long operator%(long long k);
  HugeN operator+=(long long k);
};
HugeN HugeN :: operator+=(long long k)
{
  int i,aux,tr=0;
  for(i=1;i<=x[0];i++)
  {
    aux=x[i]+k%10+tr;
    k=k/10;
    x[i]=aux%10;
    tr=aux/10;
  }
  if(tr)
    x[++x[0]]=tr;
  return (*this);
}
HugeN HugeN :: operator/(long long k)
{
  HugeN c;
  int i;
  long long r=0;
  c.x[0]=x[0];
  for(i=c.x[0];i>=1;i--)
  {
    r=r*10+x[i];
    c.x[i]=r/k;
    r=r%k;
  }
  while(c.x[c.x[0]]==0 && c.x[0]>1)
    c.x[0]--;
  return c;
}
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;
}
int main()
{
  freopen("next.in","r",stdin);
  freopen("next.out","w",stdout);
  int l;
  long long d,r;
  char s[MAX_DIGITS];
  fgets(s,MAX_DIGITS,stdin);
  l=strlen(s);
  s[l-1]=NULL;
  HugeN a(s);
  scanf("%lld",&d);
  r=a%d;
  if(r!=0)
  {
    d=d-r;
    a+=d;
  }
  a.print();
  return 0;
}