Cod sursa(job #1426423)

Utilizator justaddcodeJustadd Code justaddcode Data 29 aprilie 2015 18:18:21
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmax 1000004
using namespace std;
int n, i, j, v[Nmax], w[10];
long long k;
char s[Nmax];
void mul(int A[], long long B)
{
      long long i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
              A[i] = (t += A[i] * B * 1LL) % 10;
      A[0] = i - 1;
}
void div(int A[], long long B)
{
      long long i, t = 0;
      for (i = A[0]; i > 0; i--, t %= B)
              A[i] = (t = t * 10 + A[i] ) * 1LL / B;
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void sub(int A[], int B[])
{
      long long i, t = 0;
      for (i = 1; i <= A[0]; i++) {
              {
                  if (i > 9) B[i] = 0;
                  A[i] -= ((i <= B[0]) ? B[i] : 0) + t;
                  A[i] += (t = A[i] < 0) * 10;
              }
      }
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              {
                  if (i > 9) B[i] = 0;
                  A[i] = (t += A[i] + B[i]) % 10;
              }
      A[0] = i - 1;
}
int main()
{
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);
    gets(s + 1);
    v[0] = strlen(s + 1);
    for (i = 1; i <= v[0]; ++i)
    v[v[0] - i + 1] = s[i] - '0';
    w[ ++ w[0]]=1;
    sub(v,w);
    scanf("%lld", &k);
    div(v,k);
    add(v,w);
    mul(v,k);
    for (i = v[0]; i >= 1; --i)
    printf("%d", v[i]);
    return 0;
}