Cod sursa(job #2187321)

Utilizator cyg_andrei_HHendoreanu Andrei Sebastian cyg_andrei_H Data 26 martie 2018 13:27:30
Problema Next Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;

const int NMAX=1000000;
int c[NMAX+5],n[NMAX+5],rez[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 c[])
{
    int tr,i;
    c[0]=max(a[0],b[0]);
    tr=0;
    for(i=1;i<=c[0];++i)
    {
        c[i]=(a[i]+b[i]+tr)%10;
        tr=(a[i]+b[i]+tr)/10;
    }
    if(tr)
        c[++c[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("%lld",&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,rez);
        print(rez);
        printf("\n");
    }
    return 0;
}