Cod sursa(job #1748327)

Utilizator cirje-bogdanCirje Bogdan cirje-bogdan Data 26 august 2016 12:14:29
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int NMAXDIGITS = 1005;
char s[1000005];
class HugeN {

private:
    int x[NMAXDIGITS];
public:
    HugeN() {
        memset ( x, 0, sizeof ( x ));
                 x[0] = 1;
    }
    HugeN ( char *s ) {
        
        int l = strlen ( s );
        memset ( x, 0, sizeof ( x ) );
        x[0] = l;
        for ( int i = l - 1; i >= 0; i-- ) x[l - i] = s[i] - 48;
    }
    long long operator % ( long long k );	
    HugeN operator+= ( long long k );
    void print() {
        for ( int i = x[0]; i >= 1 ; --i ) printf ("%d", x[i] );
        printf ("\n");
    }
};//sf clasa;
long long HugeN:: operator % ( long long k ) {
    long long 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, aux;
    for ( int i = 1; i <= x[0]; ++i ) {
        aux = x[i] + tr;
        x[i] = aux % 10;
        tr = aux / 10;
    }
    while ( tr ) {
        x[0]++;
        x[x[0]] = tr % 10;
        tr = tr / 10;
    }
    return *this;
}
int main() {
	freopen("next.in","r",stdin);
	freopen("next.out","w",stdout);
    long long d,r;
    gets ( s );
    scanf ("%I64d", &d );
    HugeN N ( s );
    r = N % d;
    //printf("%s\n",s);
    if ( r ) N += d - r;
    N.print();

    return 0;
}