Cod sursa(job #2258211)

Utilizator BotzkiBotzki Botzki Data 10 octombrie 2018 23:54:21
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
const int NMAX=1000000+20;
int n[NMAX], r[NMAX], sol[NMAX];
void citire(int v[NMAX])
{
    int i, n;
    char s[NMAX];
    fin.getline(s, NMAX);
    n=strlen(s);
    memset(v, 0, NMAX*4);
    for(i=n-1;i>=0;i--)
    {
        v[++v[0]]=s[i]-'0';
    }
}
void print(int v[NMAX])
{
    for(int i=v[0];i>=1;i--)
    {
        fout<<v[i];
    }
    fout<<"\n";
}
void adunare(int a[NMAX], int b[NMAX], int c[NMAX])
{
   int tr=0, i, aux;
   c[0]=max(a[0], b[0]);
   for(i=1;i<=c[0];i++)
   {
       aux=a[i]+b[i]+tr;
       c[i]=aux%10;
       tr=aux/10;
   }
   if(tr>0)
    c[++c[0]]=tr;
}
void rest_huge_long(int a[NMAX],long long k, int c[NMAX])
{
    long long r=0;
    int i;
    for(i=a[0];i>=1;i--)
    {
        r=r*10+a[i];
        r=r%k;
    }
    if(r==0)
    {
       c[0]=1;
    }
    else
    {
      r=k-r;
      while(r)
      {
         c[++c[0]]=r%10;
         r=r/10;
      }
    }
}
int main()
{
    long long d;
    citire(n);
    fin>>d;
    rest_huge_long(n, d, r);
    adunare(n, r, sol);
    print(sol);
    return 0;
}