输入一个逆波兰式字符串,只含有0-9组成的运算数,“+”,“-”,“*”,“/” 四种运算符,两个运算数之间存在空格,不需要考虑分母为0以及不整除的情况,输入以“#”结束。
Input
一行,逆波兰式字符串
Output
一行,逆波兰式的值
Sample
input
11 2 3 + 4 *-#
output
-9
Note
样例中生成的求值表达式为"11-(2+3)*4 = -9"。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main(void) {
string s;
getline(cin, s);
stack<int> sta;
int left = 0;
int right = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= '0' && s[i] <= '9') {
string s2 = "";
while (s[i] >= '0' && s[i] <= '9') {
s2 += s[i];
i++;
}
sta.push(stoi(s2));
}
else if (s[i] != ' ' and s[i]!='#') {
if (!sta.empty()) {
right = sta.top();
sta.pop();
}
if (!sta.empty()) {
left = sta.top();
sta.pop();
}
switch (s[i]) {
case '+':
sta.push(left + right);
break;
case '-':
sta.push(left - right);
break;
case '*':
sta.push(left * right);
break;
case '/':
sta.push(left / right);
break;
default:
break;
}
}
}
cout << sta.top() << endl;
return 0;
}