Cod sursa(job #2186455)

Utilizator mateicosCostescu Matei mateicos Data 25 martie 2018 17:08:22
Problema Next Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

char a[1000005], b[1000005], c[1000005];

long long imp(int k, int n){
  int i, r;
  r = 0;
  for(i = n;i > 0;i--){
    r = r * 10 + a[i] - '0';
    r %= k;
  }
  return r;
}

void sum(int n, int m){
  int l, r, i;
  l = max(n, m);
  for(i = 1;i <= l;i++){
    if(i <= n && i <= m){
      c[i] = (r + a[i] - '0' + b[i] - '0') % 10 + '0';
      r = (r + a[i] - '0' + b[i] - '0') / 10;
    }
    else
    if(i <= n){
      c[i] = (r + a[i]- '0') % 10 + '0';
      r = (r + a[i] - '0') / 10;
    }
    else{
      c[i] = (r + b[i] - '0') % 10 + '0';
      r = (r + b[i] - '0') / 10;
    }
  }
  if(r != 0)
    c[++l] = l;
}

int main()
{
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);
    int n, m;
    long long k, r;
    gets(a + 1);
    n = strlen(a + 1);
    scanf("%lld", &k);
    reverse(a + 1, a + n + 1);
    r = imp(k, n);
    r = (k - r) % k;
    m = 0;
    while(r > 0){
      b[++m] = r % 10 + '0';
      r /= 10;
    }
    sum(n, m);
    reverse(c + 1, c + strlen(c + 1) + 1);
    printf("%s", c + 1);
    return 0;
}