Cod sursa(job #2187367)

Utilizator cyg_andrei_HHendoreanu Andrei Sebastian cyg_andrei_H Data 26 martie 2018 14:20:09
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

const int NMAX=1000000;
int c[NMAX+5],n[NMAX+5];
void 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 imp_hn_longlong(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 adun_hn_hn(int a[],int b[])
{
    int tr,i;
    tr=0;
    for(i=1;i<=a[0];++i)
    {
        a[i]=(a[i]+b[i]+tr)%10;
        tr=(a[i]+b[i]+tr)/10;
    }
    if(tr)
        a[++a[0]]=1;
}
void print(int c[])
{
  int i;
  for(i=c[0];i>=1;--i)
    printf("%d",c[i]);
}
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d,r,nr;
    char ch;
    while(scanf("%c",&ch)&&ch!='\n')
        n[++n[0]]=ch-48;
    reverse(n+1,n+n[0]+1);
    scanf("%I64d",&d);
    r=imp_hn_longlong(n,d);
    if(!r)
        print(n);
    else
    {
        nr=d-r;
        memset(c,0,sizeof(c));
        constr(nr,c);
        adun_hn_hn(n,c);
        print(n);
        printf("\n");
    }
    return 0;
}