Cod sursa(job #1838579)

Utilizator mihai.alphamihai craciun mihai.alpha Data 1 ianuarie 2017 13:04:15
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <cstdio>
#include <algorithm>
FILE *fi, *fo;
int N[1000010];
long long D;

inline void div(int A[], long long B)  {
      int i, t = 0;
      for (i = A[0]; i > 0; i--, t %= B)
              A[i] = (t = t * 10 + A[i]) / B;
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

inline long long mod(int A[], long long B)  {
      long long i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = 1LL * (t * 10 + A[i]) % B;
      return t;
}

inline 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) % 10;
      A[0] = i - 1;
}

inline void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}

int U[2] = {1, 1};
int NC[1000010];

int main()  {
    fi = fopen("next.in", "r");
    fo = fopen("next.out", "w");
    char ch;
    ch = fgetc(fi);
    while(ch != '\n')  {
        N[++N[0]] = ch - '0';
        ch = fgetc(fi);
    }
    NC[0] = N[0];
    for(int i = 1;i <= N[0];i++)
        NC[i] = N[N[0] - i + 1];
    fscanf(fi, "%lld", &D);
    long long r = mod(NC, D);
    if(r == 0)  {
        for(int i = NC[0];i > 0;i--)
            fprintf(fo, "%d", NC[i]);
        fclose(fi);
        fclose(fo);
        return 0;
    }
    div(NC, D);
    add(NC, U);
    mul(NC, D);
    for(int i = NC[0];i > 0;i--)
        fprintf(fo, "%d", NC[i]);
    fclose(fi);
    fclose(fo);
    return 0;
}