Cod sursa(job #986505)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 18 august 2013 23:33:33
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#include <string.h>
#include <algorithm>
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
long long D;
int N[1000002],V[18];
char Aux[1000002];
void Swap(int& x,int& y)
{
    int aux;
    aux=x;
    x=y;
    y=aux;
}
bool is_digit(char ch)
{
    return ch>='0' && ch<='9';
}
void Read()
{
    int i=0;
    char ch;
    f>>(Aux+1)>>D;
    N[0]=strlen(Aux+1);
    for(i=1;i<=N[0];i++)
        N[i]=Aux[N[0]-i+1]-'0';
}
void Add(int A[], int B[])
/* A <- A+B */
{ int i,T=0;

  if (B[0]>A[0])
    { for (i=A[0]+1;i<=B[0];) A[i++]=0;
      A[0]=B[0];
    }
    else for (i=B[0]+1;i<=A[0];) B[i++]=0;
  for (i=1;i<=A[0];i++)
    { A[i]+=B[i]+T;
      T=A[i]/10;
      A[i]%=10;
    }
  if (T) A[++A[0]]=T;
}
void AtribValue(int H[], long long X) {
  H[0] = 0;
  while (X) {
      ++H[0];
      H[H[0]] = X % 10;
      X /= 10;
  }
}
long long mod(int A[], long long B)
{
      long long i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % B;
      return t;
}
void Solve()
{
    long long Rest=mod(N,D);
    if(Rest!=0)
        AtribValue(V,D-Rest);
    else
        V[0]=1;
    Add(N,V);
    for(int i=N[0];i>=1;i--)
        g<<N[i];
    g<<"\n";
}
int main()
{
    Read();
    Solve();
   /*for(int i=1;i<=99999;i++)
        g<<9;
    g<<"\n";
    g<<10000000000000000;*/
    return 0;
}