Cod sursa(job #2083567)

Utilizator iDanyelArvat Ovidiu Daniel iDanyel Data 7 decembrie 2017 20:54:37
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define L 10000010
using namespace std;

ifstream fin("next.in");
ofstream fout("next.out");

long long k;
int v[L], a[L];
char c[L];

void impartire(long long D, long long& R)
{
    int T=0;

    for(long long i=v[0]; i>=1; i--)
    {
        T=T*10+v[i];
        T%=D;
    }

    R=D-T;
}

void adunare()
{
    int T=0;

    if(a[0]>v[0])
        v[0]=a[0];

    for(long long i=1; i<=v[0]; i++)
    {
        v[i]+=a[i]+T;
        T=v[i]/10;
        v[i]%=10;
    }

    if(T)
        v[++v[0]]=T;
}

int main()
{
    fin >> c;
    k=strlen(c);

    v[0]=k;

    for(long long i=k-1; i>=0; i--)
        v[k-i]=c[i]-'0';

    long long D, R;
    fin >> D;

    impartire(D,R);

    if(R!=D)
    {
        while(R)
            a[++a[0]]=R%10, R/=10;

        adunare();
    }

    for(long long i=v[0]; i>=1; i--)
        fout << v[i];

    return 0;
}