class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long legalExp(string str) {
// write code here
stack<long long> st;
int n = str.length();
for(int i = 0;i<n;i++)
{
if(isdigit(str[i]))//应对多位数处理
{
long long num = 0;
while (i<n && isdigit(str[i])) {//一般多位数就是连续的数字,否则中间有空格
num = num * 10+(str[i] - '0');
i++;
}
i--;
st.push(num);
}
else if(str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') {
if(st.size() < 2) return -1; // 错误检查
long long b = st.top(); st.pop();
long long a = st.top(); st.pop();
switch(str[i]) {
case '+': st.push(a + b); break;
case '-': st.push(a - b); break;
case '*': st.push(a * b); break;
case '/':
if(b == 0) return -1; // 除零检查
st.push(a / b);
break;
}
}
else if(str[i] == ' ')
{
continue;
}
}
return st.top();
}
};