Cod sursa(job #2222217)

Utilizator mateicosCostescu Matei mateicos Data 16 iulie 2018 18:12:30
Problema Next Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <cstring>
#include <algorithm>


using namespace std;

class huge{
private:
    char a[1000005];
    int l;
public:
    void Read(){
      gets(a + 1);
      l = strlen(a + 1);
      reverse(a + 1, a + l + 1);
    }
    void Set(long long k){
      l = 0;
      while(k > 0){
        a[++l] = k % 10 + '0';
        k /= 10;
      }

    }
    long long operator/ (long long k){
      long long i, r;
      r = 0;
      for(i = l;i > 0;i--){
        r = 1LL * r * 10 + 1LL * a[i] - 1LL * '0';
        r %= k;
      }
      return r;
    }
    void operator += (const huge &b){
      int i, tr = 0;
      i = 0;
      while((i < l || i < b.l) || tr){
        a[++i] = a[i] + b.a[i] + tr - (i <= l) * '0' - (i <= b.l) * '0';
        tr = a[i] / 10;
        a[i] = a[i] % 10;
        a[i] += '0';
      }
    }
    void prt(){
      reverse(a + 1, a + l + 1);
      printf("%s", a + 1);
      reverse(a + 1, a + l + 1);
    }
};

int main()
{
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);
    huge a, b;
    long long k;
    a.Read();
    scanf("%lld", &k);
    k = (k - a / k) % k;
    b.Set(k);
    a += b;
    a.prt();
    return 0;
}