//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)