Cod sursa(job #2189339)

Utilizator CristeaCristianCristea Cristian CristeaCristian Data 28 martie 2018 00:44:04
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

const int NMAX=1000000;
int v[NMAX+5],c[NMAX+5];
void hn_constr(long long n,int a[NMAX+5])
{
    memset(a,0,sizeof(a));
    do
    {
        a[++a[0]]=n%10;
        n/=10;
    }while(n);
}
long long hn_divide_rest(int a[],long long b)
{
  long long r;
  int i;
  r=0;
  for(i=a[0];i>=1;--i)
  {
    r=r*10+a[i];
    r=r%b;
  }
  return r;
}
void hn_adun(int a[],int b[])
{
    int tr,i,aux;;
    tr=0;
    for(i=1;i<=a[0];++i)
    {
        aux=(a[i]+b[i]+tr);
        a[i]=aux%10;
        tr=aux/10;
    }
    if(tr)
        a[++a[0]]=1;
}
void print(int x[])
{
  int i;
  for(i=x[0];i>=1;--i)
    printf("%d",x[i]);
}
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d,r;
    char ch;
    while(scanf("%c",&ch) && ch!='\n')
        v[++v[0]]=ch-48;
    reverse(v+1,v+v[0]+1);
    scanf("%lld",&d);
    r=hn_divide_rest(v,d);
    if(r==0)
        print(v);
    else
    {
        long long ans=d-r;
        memset(c,0,sizeof(c));
        hn_constr(ans,c);
        hn_adun(v,c);
        print(v);
        printf("\n");
    }
    return 0;
}