Advertisement

表达式求值(2013年NOIP普及组)

阅读量:

线上OJ:

一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=1962

核心思想:(模拟)

本题所涉及的符号仅有 +*,未包含括号结构,也无需对表达式进行合法性验证,因此在逻辑层面并不复杂。只需 优先处理输入中的乘法运算,并在最后统一执行加法操作 即可。因此,可以运用 模拟 的策略,在读取数据的同时即时进行处理

第一步

输入一个符号以及一个数值。(例如:对于表达式15+22*36+49,所输入的内容可能为+22、*36或+49)

第二步

当该数值前出现乘号时,需先提取前一数值进行相乘运算,随后仅将所得乘积压入数字栈(例如上述公式中的22*36=792,将792压入数字栈);若该数值前为加号,则直接将其数值压入栈中

第三步

鉴于乘法运算在入栈之前已完成,因此栈中存储的数值只需按顺序进行累加操作即可

题解代码:

复制代码
    #include <bits/stdc++.h>
    #define ll long long
    #define MOD 10000
    using namespace std;
    
    stack <ll> num_stk; // 存储数字
    
    int ma

全部评论 (0)

还没有任何评论哟~