示例#1
0
//mnozenie
CNumber CNumber::cMultiply(CNumber &cMultiplier) {
	if (b_positive != cMultiplier.b_positive) {// gdy sa roznych znakow
		if (!b_positive) {// this ujemny
			b_positive = true;
			CNumber c_result (cMultiply(cMultiplier));
			c_result.b_positive = false;
			b_positive = false;

			return c_result;
		}//if (!b_positive)

		else {// multiplier ujemny 
			cMultiplier.b_positive = true;
			CNumber c_result(cMultiply(cMultiplier));
			c_result.b_positive = false;
			cMultiplier.b_positive = false;

			return c_result;
		}//else
	}//if (b_positive != cMultiplier.b_positive)

	if (i_length < cMultiplier.i_length)
		return cMultiplier.cMultiply(*this);

	// mnozymy 2 liczby o tych samych znakach, gdzie pierwsza jest wieksza badz rowna drugiej
	CNumber c_result (max(i_length, cMultiplier.i_length) * 2); //dlugosc liczby maksymalnie 2 razy wieksza niz najwiekszej z liczb

	int k = 0;
	for (int i = cMultiplier.i_length - 1; i >= 0; i--) {
		if (cMultiplier.pi_number[i] != 0) {
			for (int j = i_length - 1; j >= 0; j--)
				c_result.v_increment(c_result.i_length - 1 - k - (i_length - 1 - j), cMultiplier.pi_number[i] * pi_number[j]);

		}//if (cMultiplier.pi_number[i] != 0)
	
		k++;

	}//for (int i = cMultiplier.i_length - 1; i >= 0; i--)

	return c_result;
}//CNumber CNumber::cMultiply(CNumber &cMultiplier)