Cod sursa(job #1747218)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 24 august 2016 17:02:44
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_DIGITS = 1000010;
const int MAXN = 1000000;
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 = a + (d - r);
	a.print();
    return 0;
}