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;
}
이상으로 두 다항식의 곱셈 구현 포스팅을 마치겠습니다.
댓글
댓글 쓰기