题解 | #牛的表达式计算器#
牛的表达式计算器
https://www.nowcoder.com/practice/261e7f01438f414c92f59c0059d3a906
题解 | 牛的表达式计算器
语言: C++
知识点: 栈, 后缀表达式
分析: 本题考察的是使用栈模拟后缀表达式的运算过程,具体方法为:依次遍历给出的后缀表达式,若为数字则将其入栈;若为运算符则从栈顶依次弹出两个数字然后根据该运算符将这两个数字进行相应的运算,之后将运算结果入栈。直到整个后缀表达式遍历完成后,此时的栈顶元素即为最终表达式的运算结果。
代码实现:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param tokens string字符串vector
* @return int整型
*/
int calculatePostfix(vector<string>& tokens) {
stack<int> sk;
for(int i = 0; i < tokens.size(); i++)
{
if(tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/")
{
sk.push(stoi(tokens[i])); // 遇到数字将其入栈(需要将字符串转为整型)
}
else // 遇到运算符则依次弹出栈顶的两个数字进行相应的运算
{
int b = sk.top();
sk.pop();
int a = sk.top();
sk.pop();
int res;
if(tokens[i] == "+")
{
res = a + b;
}
else if(tokens[i] == "-")
{
res = a - b; // 注意弹出和运算顺序
}
else if(tokens[i] == "*")
{
res = a * b;
}
else
{
res = a / b;
}
sk.push(res); // 将运算结果入栈
}
}
return sk.top(); // 最终栈顶元素即为运算结果
}
};