当前位置:网站首页>acwing 3302. Expression evaluation
acwing 3302. Expression evaluation
2022-07-04 20:55:00 【_ Liu Xiaoyu】
Given an expression , The operator only contains +,-,*,/( Add reduce ride to be divisible by ), May contain parentheses , Please find the final value of the expression .
Be careful :
The data guarantees that the given expression is legal .
Title Guarantee symbol - Appears only as a minus sign , Will not appear as a minus sign , for example ,-1+2,(2+2)*(-(1+1)+2) Such expressions will not appear .
Ensure that all numbers in the expression are positive integers .
The title ensures that the expression is in the intermediate calculation process and the result , Not more than 231−1.
The division in the title points to 0 integer , That is, for greater than 0 The result is rounded down , for example 5/3=1, For less than 0 The result is rounded up , for example 5/(1−4)=−1.
C++ and Java The default division in is rounding to zero ;Python Integer division in // Round down by default , therefore Python Of eval() The integer division in the function is also rounded down , You can't use... Directly in this question .
Input format
All in one line , For the given expression .
Output format
All in one line , Is the result of the expression .
Data range
The length of the expression does not exceed 105.
sample input :
(2+2)*(1+1)
sample output :
8
The key :
Two stacks are required , A stack is used to store numbers , Another is to save the operation operator
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
#include <unordered_map>
using namespace std;
stack<int> num; // Save digital stack
stack<char> op; // Save the operator stack
void eval()
{
auto b = num.top(); num.pop(); // Take the number
auto a = num.top(); num.pop(); // Take the number
auto c = op.top(); op.pop(); // Take operator
int x;
// Calculation
if (c == '+') x = a + b;
else if (c == '-') x = a - b;
else if (c == '*') x = a * b;
else x = a / b;
num.push(x);
}
int main()
{
unordered_map<char, int> pr{
{
'+', 1}, {
'-', 1}, {
'*', 2}, {
'/', 2}}; // If there is ^, You can add {'^',3}
string str;
cin >> str;
for (int i = 0; i < str.size(); i ++ )
{
auto c = str[i];
if (isdigit(c)) // Digital stack
{
int x = 0, j = i;
while (j < str.size() && isdigit(str[j]))
x = x * 10 + str[j ++ ] - '0';
i = j - 1;
num.push(x);
}
else if (c == '(') op.push(c);
else if (c == ')')
{
while (op.top() != '(') eval(); // Always need to calculate to the left bracket
op.pop();
}
else
{
while (op.size() && op.top() != '(' && pr[op.top()] >= pr[c]) eval(); // Priority saved in the stack >= Current priority
op.push(c);
}
}
while (op.size()) eval();
cout << num.top() << endl;
return 0;
}
边栏推荐
- WinCC7.5 SP1如何通过交叉索引来寻找变量及其位置?
- How to adapt your games to different sizes of mobile screen
- Stack: how to realize the judgment of valid brackets?
- 面对同样复杂的测试任务为什么大老很快能梳理解决方案,阿里十年测试工程师道出其中的技巧
- 伦敦银走势图分析的新方法
- ICML 2022 | meta proposes a robust multi-objective Bayesian optimization method to effectively deal with input noise
- Flet tutorial 06 basic introduction to textbutton (tutorial includes source code)
- Win11系统wifi总掉线怎么办?Win11系统wifi总掉线的解决方法
- 二叉树的四种遍历方式以及中序后序、前序中序、前序后序、层序创建二叉树【专为力扣刷题而打造】
- FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet
猜你喜欢

Form组件常用校验规则-1(持续更新中~)

看腾讯大老如何做接口自动化测试

接口設計時的一些建議

Hands on deep learning (III) -- convolutional neural network CNN

Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法

Flet tutorial 06 basic introduction to textbutton (tutorial includes source code)

托管式服务网络:云原生时代的应用体系架构进化

Flet教程之 06 TextButton基础入门(教程含源码)

Reinforcement learning - learning notes 2 | value learning

MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询
随机推荐
go笔记(3)Go语言fmt包的用法
LeetCode 871. 最低加油次数
测试员的算法面试题-找众数
What should I do if my computer sharing printer refuses access
MySQL statement execution details
What if the computer page cannot be full screen? The solution of win11 page cannot be full screen
强化学习-学习笔记2 | 价值学习
栈:如何实现有效括号的判断?
GVM使用
NetCore3.1 Json web token 中间件
Flet教程之 04 FilledTonalButton基础入门(教程含源码)
E-week finance | Q1 the number of active people in the insurance industry was 86.8867 million, and the licenses of 19 Payment institutions were cancelled
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]
Flet tutorial 07 basic introduction to popupmenubutton (tutorial includes source code)
Win11共享文件打不开怎么办?Win11共享文件打不开的解决方法
Selected review | machine learning technology for Cataract Classification / classification
ICML 2022 | meta proposes a robust multi-objective Bayesian optimization method to effectively deal with input noise
Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法
What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system
扩展你的KUBECTL功能