Cod sursa(job #1747643)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 25 august 2016 12:06:31
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAX_DIGITS = 1000005;
const int BASE = 10;
char vec[MAX_DIGITS];
class HugeN
{
    private: int x[MAX_DIGITS];
    public:
        HugeN( )
        {
            memset(x, 0 , sizeof(x));
        }
        HugeN(char *vec)
        {
            x[0] = strlen(vec);
            for (int i = 1; i <= x[0]; ++i){
                x[i] = vec[x[0] - i] - '0';
            }
        }
        void print( )
        {
            for (int i = x[0] ;i >= 1; --i){
                printf("%d",x[i]);
            }
            printf("\n");
        }
        HugeN operator + (long long d);
        long long operator % (long long d);
};
HugeN HugeN::operator + (long long d)
{
    long long tr , aux;
    tr = d;
    for(int i = 1; i <= x[0]; ++ i)
    {
        aux = x[i] + tr;
        x[i] = aux % BASE;
        tr = aux / BASE;
    }
    while( tr > 0)
    {
        x[ ++x[0] ] = tr % BASE;
        tr /= BASE;
    }
    return *this;
}
long long HugeN::operator % (long long d)
{
    long long int rez = 0;
    for (int i = x[0] ; i >= 1 ; -- i)
    {
        rez = ( rez * BASE + x[i] ) % d;
    }
    return rez;
}
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long d, rest;
    scanf("%s",&vec);
    scanf("%lld",&d);
    HugeN n( vec );
    rest = n % d;
    if(rest==0){
        n.print();
    }
    else{
        n = n + ( d - rest);
        n.print();
    }
    return 0;
}