Cod sursa(job #1748307)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 26 august 2016 12:07:06
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

const int NMAXDIGIT = 1000005;
char s[1000005];
class HugeN
{
private:
    int x[NMAXDIGIT];
public:
    HugeN()
    {
        memset(x,0,sizeof(x));
        x[0] = 1;
    }
    HugeN(char *s)
    {
        int n = strlen(s);
        memset(x,0,sizeof(x));
        x[0] = n;
        for(int i = n - 1 ; i >= 0 ; i--)
        {
            x[n - i] = (s[i] - '0');
        }
    }
    void get_huge();
    HugeN&operator +(int k);
    HugeN&operator +(const HugeN &other);
    long long operator %(long long k);
    HugeN& operator+=(long long k);
};

void HugeN::get_huge()
{
    for(int i = x[0] ; i >= 1 ; i--)
    {
        printf("%d",x[i]);
    }
    printf("\n");
}


long long HugeN::operator%(long long k)
{
    int r = 0;
    for(int i = x[0] ; i >= 1 ; i--)
    {
        r = r * 10 + x[i];
        r = r % k;
    }
    return r;
}

HugeN& HugeN::operator += (long long k)
{
    long long tr = k;
    long long aux;
    for(int i = 1 ; i <= x[0] ; i++)
    {
        aux = x[i] + tr;
        x[i] = aux % 10;
        tr = aux / 10;
    }
    while(tr)
    {
        x[++x[0]] = tr % 10;
        tr /= 10;
    }
    return *this;
}
int main()
{
    freopen("next.in","r",stdin);
    freopen("next.out","w",stdout);
    long long D;
    gets(s);
    scanf("%lld",&D);
    HugeN N(s);
    long long r = N % D;
    if(r != 0)
        N += (D - r);
    N.get_huge();
    return 0;
}