Cod sursa(job #1524125)

Utilizator nedelcu11Nedelcu Mihai Vlad nedelcu11 Data 13 noiembrie 2015 16:15:46
Problema Next Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#define D 40000
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
typedef int Huge[1000003];
Huge a;
long long d,r;
int n,i;
char c=0;
void Subtract(Huge a,Huge b)
{ int i, T=0;
  for (i=b[0]+1;i<=a[0];) b[i++]=0;
  for (i=1;i<=a[0];i++)
    a[i]+= (T=(a[i]-=b[i]+T)<0) ? 10 : 0;
  while (!a[a[0]]) a[0]--;
}
void Add(Huge a, Huge 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;
}
unsigned long Mod(Huge A, unsigned long X)
{ int i;
  unsigned long R=0;

  for (i=A[0];i;i--)
    R=(10*R+A[i])%X;
  return R;
}
int main()
{   f.get(c);
    while(c!='\n')
    {   a[++a[0]]=c-'0';
        f.get(c);
    }
    reverse(a+1,a+a[0]+1);
    f>>d;
    r=Mod(a,d);
    if(r)
    {   int x=d-r;
        int k=1;
        a[k]+=x;
        int t=a[k]/10;
        a[k]%=10;
        while(t!=0 and k<=a[0])
        {   a[++k]+=t;
            t=a[k]/10;
            a[k]%=10;
        }
        if(t==1) a[++a[0]]=1;
    }
    for(int i=a[0];i>=1;i--) g<<a[i];
    return 0;
}