Cod sursa(job #1593707)

Utilizator adiXMGemene Adrian adiXM Data 8 februarie 2016 20:12:07
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
const int MAXDIGITS=105;
char s[MAXDIGITS];
struct NumarMare
{
    int v[MAXDIGITS];
    NumarMare()
    {
        for(int i=0;i<MAXDIGITS;i++)
            v[i]=0;
    }
    NumarMare(long long x)
    {
        for(int i=0;i<MAXDIGITS;++i)
            v[i]=0;
        if(x==0)
            v[0]++;
        while(x>0)
        {
            v[++v[0]]=x%10;
            x/=10;
        }
    }
    NumarMare(char *s)
    {
        for(int i=0;i<MAXDIGITS;i++)
            v[i]=0;
        int n=strlen(s);
        for(int i=n-1;i>=0;i--)
            v[++v[0]]=s[i]-'0';
    }
    inline void Afisare()
    {
        for(int i=v[0];i>=1;i--)
            g<<v[i];
    }
};
NumarMare operator + (NumarMare A,NumarMare B)
{
    NumarMare C;
    int t=0,i,d;
    d=max(A.v[0],B.v[0]);
    for(i=1;i<=d || t>0;i++)
    {
        t+=A.v[i]+B.v[i];
        C.v[i]=t%10;
        t/=10;
    }
    C.v[0]=i-1;
    return C;
}
inline int operator % (NumarMare A,long long x)
{
    int rest=0;
    for(int i=A.v[0];i>=1;i--)
        rest=(rest*10+A.v[i])%x;
    return rest;
}
int main()
{
    long long d;
    f>>(s+1)>>d;
    NumarMare B(s+1);
    NumarMare V=B+(d-(B%d));
    V.Afisare();
    return 0;
}