학교 교과목인 데이터구조와알고리즘 과제로 다항식의 계산을 구현해보았다.
풀이법
1) Class를 주어진 조건에 맞게 정의하고 vector를 이용한다면 쉽게 구현 가능하다.
#include <vector>
#include <math.h>
#include <algorithm>
#include <iostream>
using namespace std;
class polynomial
{
public:
vector<int> coef;
polynomial(vector<int>coef)
{
this->coef = coef;
}
int degree();
int evaluate(int scalar);
polynomial add(polynomial expr);
polynomial substract(polynomial expr);
void display();
};
int polynomial::degree()
{
int degree = coef.size() - 1;//최고 차항의 차수
return degree;
}
int polynomial::evaluate(int scalar)
{
int sum = 0;
for (int i = 0; i <= degree(); i++)
{
if (i == 0)
sum += coef[i]; //0일떄는 그냥
else
sum += coef[i]*(int)pow(scalar, i);//아닌 경우에는 계산
}
return sum;
}
polynomial polynomial::add(polynomial expr)
{
vector<int> ans;
int num = max(coef.size(), expr.coef.size());
if (coef.size() > expr.coef.size())
{
while (expr.coef.size() != num)
expr.coef.push_back(0);//더하기 위해 크기를 맞추었습니다.
}
else
{
while (coef.size() != num)
coef.push_back(0); //더하기 위해 크기를 맞추었습니다.
}
for (int i = 0; i < num; i++)
ans.push_back(coef[i] + expr.coef[i]);
return ans;
}
polynomial polynomial::substract(polynomial expr)
{
vector<int> ans;
int num = max(coef.size(), expr.coef.size());
if (coef.size() > expr.coef.size())
{
while (expr.coef.size() != num)
expr.coef.push_back(0);//빼기 위해 크기를 맞추었습니다.
}
else
{
while (coef.size() != num)
coef.push_back(0); //빼기 위해 크기를 맞추었습니다.
}
for (int i = 0; i < num; i++)
ans.push_back(coef[i] - expr.coef[i]);
return ans;
}
void polynomial::display()
{
for (int i = degree(); i >= 0; i--)
{
if (coef[i] == 0)
continue;
if (i == 0)
{
if (coef[i] < 0)
cout << " " << coef[i];
else
cout << "+ " << coef[i];
}
else
{
if (i != degree())
{
if (coef[i] < 0)
cout << " ";
else
cout << "+ ";
}
cout<<coef[i] << "x^" << i << " ";
}
}
cout << "\n\n";
}
int main()
{
cout.tie(0);
vector<int> num1 = { -1,-8,6,4 };
polynomial expr1 = polynomial(num1);
cout << "expr1 객체를 display한 결과는 :";
expr1.display();
vector<int> num2 = { 5,1,2,8,-7,9 };
polynomial expr2 = polynomial(num2);
cout << "expr2 객체를 display한 결과는 :";
expr2.display();
polynomial expr3 = expr1.add(expr2);
cout << "expr3 객체를 display한 결과는 :";
expr3.display();
cout << "expr3 객체에 2을 넣은 결과는 :";
cout<<expr3.evaluate(2)<<"\n\n";
polynomial expr4 = expr1.substract(expr2);
cout << "expr4 객체를 display한 결과는 :";
expr4.display();
}
'데이터구조와알고리즘' 카테고리의 다른 글
데이터구조와알고리즘 과제_회문 (0) | 2021.04.14 |
---|---|
데이터구조와알고리즘 과제_후위연산식(Stack) (0) | 2021.04.13 |