Cod sursa(job #1747450)

Utilizator isa_fares_mudiFares Mohamad isa_fares_mudi Data 24 august 2016 22:02:00
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAX_DIGITS = 1000005;
const int MAXN = 1000000;
const int BASE = 10;
char s[MAXN+5];
class HugeN {
	private: int x[MAX_DIGITS];
	public:
		HugeN () {
            x[0] = 1;
            memset( x, 0, sizeof(x) );
        }
        HugeN ( char s[MAXN+5] ) {
            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, trn;
    trn = k;
    for ( i = 1 ; i <= x[0] ; ++ i ) {
        aux = x[i] + trn;
        x[i] = aux % 10;
        trn = aux / 10;
    }
    while ( trn ) {
        x[++x[0]] = trn % 10;
        trn /= 10;
    }
    return *this;
}
long long HugeN::operator % ( long long k ){
    int i, 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 );
    long long d, r;
    scanf ( "%s", &s );
    scanf ( "%lld", &d );
    HugeN n(s);
    r = n % d;
    if ( !r )
        n.print();
    else {
        n = n + ( d - r );
        n.print();
    }
    return 0;
}