후위 표기식과 각 피연산자에 대응하는 값들이 주어져 있을 때, 그 식을 계산하는 프로그램을 작성하시오.
자료 구조
스택
입력된 문자열의 앞에서부터 탐색하면서 연산자가 아닌 피 연산자를 차럐대로 스택에 넣으면 된다.
연산자를 만났을 경우에 스택에서 두 원소를 빼내서 알맞은 연산을 한 후 연산 결과값을 다시 스택에 넣는다.
피연산자의 경우에는 그에 해당하는 실 값을 ary
배열에 저장하여, 해당 값을 스택에 넣도록 했다.
즉, ary[in[i]] - 65]
를 push
해주었다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<double> s;
double ary[27] = { 0 };
int n;
double par1, par2;
string in;
cin >> n;
cin >> in;
for (int i = 0; i < n; i++)
cin >> ary[i];
for (int i = 0; i < in.length(); i++) {
if (in[i] == '+') {
par1 = s.top();
s.pop();
par2 = s.top();
s.pop();
s.push(par1 + par2);
}
else if (in[i] == '*') {
par1 = s.top();
s.pop();
par2 = s.top();
s.pop();
s.push(par1 * par2);
}
else if (in[i] == '/') {
par1 = s.top();
s.pop();
par2 = s.top();
s.pop();
s.push(par2 / par1);
}
else if (in[i] == '-') {
par1 = s.top();
s.pop();
par2 = s.top();
s.pop();
s.push(par2 - par1);
}
else
s.push(ary[in[i] - 65]);
}
printf("%.2lf", s.top());
return 0;
}