自学内容网 自学内容网

19009 后缀表达式

### 思路
1. **输入处理**:读取输入的后缀表达式,去掉末尾的`@`符号。
2. **使用栈计算后缀表达式**:
   - 遍历表达式中的每个字符。
   - 如果是数字,压入栈中。
   - 如果是运算符,从栈中弹出两个数字进行运算,并将结果压入栈中。
3. **输出结果**:栈中最后剩下的数字即为表达式的结果。

### 伪代码
```
function evaluate_postfix(expression):
    stack = []

    for token in expression.split():
        if token is a digit:
            stack.push(int(token))
        else if token is an operator:
            b = stack.pop()
            a = stack.pop()
            result = perform_operation(a, b, token)
            stack.push(result)

    return stack.pop()

function perform_operation(a, b, operator):
    if operator == '+':
        return a + b
    if operator == '-':
        return a - b
    if operator == '*':
        return a * b
    if operator == '/':
        return a / b

function main():
    while input is not EOF:
        expression = read_input().strip('@')
        result = evaluate_postfix(expression)
        print(result)
```

### C++代码
 

#include <iostream>
#include <stack>
#include <sstream>
#include <string>

int main() {
    std::string input;
    std::getline(std::cin, input);

    std::stack<int> s;
    std::istringstream iss(input);
    std::string token;

    while (iss >> token) {
        if (token == "@") {
            break;
        } else if (isdigit(token[0])) {
            s.push(std::stoi(token));
        } else {
            for (char op : token) {
                if (op == '@') {
                    break;
                }
                int b = s.top(); s.pop();
                int a = s.top(); s.pop();
                if (op == '+') {
                    s.push(a + b);
                } else if (op == '-') {
                    s.push(a - b);
                } else if (op == '*') {
                    s.push(a * b);
                } else if (op == '/') {
                    s.push(a / b);
                }
            }
        }
    }

    std::cout << s.top() << std::endl;
    return 0;
}

### 总结
1. **输入处理**:读取并去掉末尾的`@`符号。
2. **使用栈计算后缀表达式**:遍历表达式,数字压栈,运算符弹出两个数字计算并压栈。
3. **输出结果**:栈中最后剩下的数字即为结果。


原文地址:https://blog.csdn.net/huang1xiao1sheng/article/details/142931027

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!