Cod sursa(job #1747201)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 24 august 2016 16:42:12
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX_DIGITS = 1000500;
const int MAXN = 1000000;
char s[MAXN + 5];
class HugeN{
	private: short 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 + (int k);
		HugeN operator * (long long k);
		HugeN operator / (long long k);
		long long operator % (long long k);
};
HugeN HugeN::operator + (int k){
	HugeN temp;
	temp.x[0] = x[0];
	int i, r = 0, aux;
	for (i = 1; i <= temp.x[0]; i ++){
		aux = x[i] + k;
		temp.x[i] = aux % 10;
		k = aux / 10;
	}
	while (k){
		temp.x[++temp.x[0]] = k % 10;
		k /= 10;
	}
	return temp;
}
HugeN HugeN::operator * (long long k){
	HugeN temp;
	temp.x[0] = x[0];
	int i;
	short int u;
	long long tr = 0, aux;
	for (i = 1; i <= temp.x[0]; i ++){
		aux = 1LL * x[i] * k + tr;
		u = aux % 10;
		temp.x[i] = u;
		tr = aux / 10;
	}
	while (tr){
		u = tr % 10;
		temp.x[++temp.x[0]] = u;
		tr /= 10;
	}
	return temp;
}
HugeN HugeN::operator / (long long k){
    HugeN temp;
    temp.x[0] = x[0];
    int i;
    short int u;
    long long r = 0, aux;
    for (i = temp.x[0]; i >= 1; i --){
        aux = r * 10 + x[i];
        u = aux / k;
        temp.x[i] = u;
        r = aux % k;
    }
    while (temp.x[temp.x[0]] == 0)
        temp.x[0] --;
    return temp;
}
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;
    gets(s);
    HugeN a(s);
	scanf("%lld", &d);
	if (a % d == 0){
		a.print();
		return 0;
	}
	a = a / d;
	a = a + 1;
	a = a * d;
	a.print();
    return 0;
}