Cod sursa(job #2259905)

Utilizator Cyg_PEduardPetcu Eduard Cyg_PEduard Data 13 octombrie 2018 22:23:19
Problema Next Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
///12288KB=10.000.000B(10milioane B)
const int NMAX=1000003;
char s[NMAX];
int a[NMAX];
int dd[22];
int c[NMAX];
void citire()
{
    int n,i;
    fin.getline(s,NMAX);
    n=strlen(s);
    a[0]=0;
    for(i=n; i>=1; i--)
        a[++a[0]]=s[i-1]-'0';
}
void print(int a[])
{
    int i;
    for(i=a[0]; i>=1; i--)
        fout<<a[i];
}
long long mod(int a[],long long x)
{
    long long r;
    int i;
    r=0;
    for(i=a[0]; i>=1; i--)
    {
        r=r*10+a[i];
        r=r%x;
    }
    return r;
}
void adun(int a[],int b[],int c[NMAX])
{
    int i,tr,aux;
    memset(c,0,NMAX);
    c[0]=a[0];
    if(b[0]>c[0])
       c[0]=b[0];
    tr=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;
}

int main()
{
    unsigned long long D,rest;
    citire();
    fin>>D;
    rest=D-mod(a,D);
    if(rest==D)
    {
        print(a);
        return 0;
    }
    while(rest)
    {
        dd[++dd[0]]=rest%10;
        rest/=10;
    }
    adun(a,dd,c);
    print(c);
    return 0;
}