洛谷题单指南-线性表-P1449 后缀表达式

原题链接:https://www.luogu.com.cn/problem/P1449

题意解读:计算后缀表达式,堆栈的典型应用。

解题思路:

本题要解决两个问题:字符串的读取、后缀表达式的计算,整个过程如下,

要将字符串拆接触操作数、操作符,将操作数放入堆栈,操作符用于计算

遍历每一个字符:

1、如果是数字,则进行数字计算:初始定义整数num=0,遇到的数字字符c,需要num = num * 10 + c - '0'

如此操作即可将数字字符串转为整数;

2、如果是'.',将num的值放入堆栈;

3、如果是'+'、'-'、'*'、'/',从堆栈取栈顶两个数进行计算,结果再次入栈

4、如果是'@'则结束

最后输出堆栈栈顶元素,即为结果。

100分代码:

#include <bits/stdc++.h>
using namespace std;

string s;
stack<int> stk;

void compute(char op)
{
    int b = stk.top(); stk.pop();
    int a = stk.top(); stk.pop();
    int result;
    if(op == '+') result = a + b;
    else if(op == '-') result = a - b;
    else if(op == '*') result = a * b;
    else result = a / b;

    stk.push(result);
}

int main()
{
    cin >> s;
    int num = 0;
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] >= '0' && s[i] <= '9') //如果是数字,进行字符串转数字计算
        {
            num = 10 * num + s[i] - '0';
        }
        else if(s[i] == '.') //如果是.,则将读取完毕的数字压栈
        {
            stk.push(num);
            num = 0; //num清0
        }
        else if(s[i] == '@') break;
        else compute(s[i]); //+、-、*、/符号则进行计算
    }
    cout << stk.top();

    return 0;
}

 

posted @ 2024-03-11 11:29  五月江城  阅读(70)  评论(0编辑  收藏  举报