Cod sursa(job #1747406)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 24 august 2016 21:10:17
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_DIGITS = 10010;
const int MAXN = 10000;
char s[MAXN + 5];
class HugeN{
    private: int x[MAX_DIGITS];
    public:
        HugeN(){
            x[0] = 1;
            memset(x, 0, sizeof(x));
        }
        HugeN(char *s){
            x[0] = strlen(s);
            for (int i = 1; i <= x[0]; i ++)
                x[i] = s[x[0] - i] - '0';
        }
        void print(){
            for (int i = x[0]; i >= 1; i --)
                printf("%d", x[i]);
            printf("\n");
        }
        HugeN &operator += (long long k);
        long long operator % (long long k);
};
HugeN &HugeN::operator += (long long k){
    int i;
    long long aux, tr = k;
    for (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;
}
long long HugeN::operator % (long long k){
    int i;
    long long r = 0, aux;
    for (i = x[0]; i >= 1; i --)
        r = (r * 10 + x[i]) % k;
    return r;
}
int main(){
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);
    int i;
    long long d, r;
    gets(s);
    HugeN a(s);
    scanf("%lld", &d);
    r = a % d;
    if (r == 0){
        a.print();
        return 0;
    }
    a += (d - r);
    a.print();
    return 0;
}