表达式求值(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)
还没有任何评论哟~
