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. **输出结果**:栈中最后剩下的数字即为结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值