int main() { Polynomial poly; /*Polynomial poly2; Polynomial poly3(0); cout << "P1: "; poly.display(); cout << "\nP2: "; poly2.display(); cout << "\nP1 + P2: "; poly3 = poly + poly2; poly3.display(); cout << "\nP1 - P2: "; poly3 = poly - poly2; poly3.display(); cout << "\nP1 * P2: "; poly3 = poly * poly2; poly3.display(); cout << "\nP3 += P1: "; poly3 += poly; poly3.display(); cout << "\nP3 -= P2: "; poly3 -= poly; poly3.display(); cout << endl << endl << endl; */Polynomial poly4(0);/* Polynomial poly5; Polynomial poly6 = poly4 / poly5; poly6.display(); poly6.getRemainder();*/ poly.factor(poly); cout << endl; return 0; }
// O(n^2 + m^2) from factor // O(n log n) sort // O(n * m) adding Polynomial Polynomial::operator +(Polynomial& rhs) { /* PRE-CONDITIONS: The two polynomials have been entered in the correct format. Factoring called in-function. POST-CONDITIONS: The polynomial will combine all like terms from both of the polynomials and return the result as a new polynomial. */ Polynomial newPoly; bool foundLikeTerm; int newCoefficient; // factor polynomials before adding them together factor(); rhs.factor(); // begin comparing terms from each Polynomial and combining them for (list<Term>::iterator iter = termList.begin(); iter != termList.end(); iter++) { foundLikeTerm = false; // compare each term from poly1 with every term from poly2 for (list<Term>::iterator iter2 = rhs.termList.begin(); iter2 != rhs.termList.end();) { if (iter->getHasVariable() == true && iter->getExponent() == iter2->getExponent()) { // If there is a like term, add the coefficients together and add to new poly list foundLikeTerm = true; newCoefficient = iter->getCoefficient() + iter2->getCoefficient(); // Advance iterator and delete current term iter2 = rhs.termList.erase(iter2); if (newCoefficient != 0) // Add combined term to new polynomial newPoly.addTermToList(Term(newCoefficient, iter->getExponent())); } else if (iter->getHasVariable() == false && iter2->getHasVariable() == false) { foundLikeTerm = true; newCoefficient = iter->getCoefficient() + iter2->getCoefficient(); // Advance iterator and delete current term iter2 = rhs.termList.erase(iter2); // Add combined term to new polynomial if it is anything but zero. if (newCoefficient != 0) newPoly.addTermToList(Term(newCoefficient)); } else{ iter2++; } } // If there are no terms to be combined with, add term as it is. // drop stand alone zeros from the polynomial if (foundLikeTerm == false && iter->getCoefficient() != 0) newPoly.addTermToList(*iter); } // add remaining terms from poly2 that had no matching terms in poly1 for (list<Term>::iterator iter2 = rhs.termList.begin(); iter2 != rhs.termList.end(); iter2++) newPoly.addTermToList(*iter2); // Sort (ascending order) and reverse to get it descending newPoly.termList.sort(greater<Term>()); return newPoly; }