C++로 구현한 두 다항식 간의 곱셈 연산
1. Polynomial의 구조:
// Term 구조체 선언 struct Term { friend Polynomial; float coef; int exp; }; // Polynomial 클래스 선언 class Polynomial { private: Term * termArray; int capacity; int terms; // 클래스에 현재 저장되어 있는 항의 개수를 나타냄. public : Polynomial(); Polynomial operator*(Polynomial* b); // NewTerm 함수로 Polynomial에 Term을 연결한다. void NewTerm(const float theCoef, const int theExp); };
2. 곱하기 연산 개요
2-1. 각 항을 순회하며 항의 곱셈 연산을 실시합니다..
2-2. 최고차항부터 같은 지수를 가지는 항들의 계수를 모두 더한 후, 새로 저장합니다.
소스코드 :
소스코드 :
Polynomial Polynomial::operator*(Polynomial& b) { Polynomial c; // 최종 곱셈 결과를 저장할 다항식 클래스 tmp 선언. Polynomial tmp; // 임시 곱셈 결과를 저장할 다항식 클래스 tmp 선언. // 각 term 간의 곱셈 연산을 tmp의 termArray에 저장. for (int i = 0; i < terms; i++) { for (int j = 0; j < b.terms; j++) { float new_coef = termArray[i].coef * b.termArray[j].coef; int new_exp = termArray[i].exp + b.termArray[j].exp; tmp.NewTerm(new_coef, new_exp); } } // for문으로 최고차항에서 내림차순으로, 같은 지수면 전부 합한 후 c의 termArray에 저장. int big = tmp.termArray[0].exp; c.NewTerm(tmp.termArray[0].coef, tmp.termArray[0].exp); int newbig, sumOfCoef; for (int i = 0; i < tmp.terms; i++) { // big > tmp.termArray[q] > newbig 을 만족하는 다음으로 큰 지수(newbig)을 탐색. newbig = 0; for (int q = 1; q < tmp.terms; q++) { if (tmp.termArray[q].exp < big & & tmp.termArray[q].exp > newbig) newbig = tmp.termArray[q].exp; } sumOfCoef = 0; // newbig과 같은 exp를 가지는 항들을 모두 더함. for (int q = 0; q < tmp.terms; q++) { if (tmp.termArray[q].exp == newbig) sumOfCoef += tmp.termArray[q].coef; } // 합한 결과를 c에 저장. c.NewTerm(sumOfCoef, newbig); big = newbig; // 지수가 0일 경우 한번만 저장한 후 더이상 돌지 않도록 break. if (big == 0) break; } return c; }
이상으로 두 다항식의 곱셈 구현 포스팅을 마치겠습니다.
댓글
댓글 쓰기