当前位置:网站首页>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;
}
边栏推荐
- Aiming at the "amnesia" of deep learning, scientists proposed that based on similarity weighted interleaved learning, they can board PNAS
- 测试员的算法面试题-找众数
- LeetCode 8. 字符串转换整数 (atoi)
- Write it down once Net analysis of thread burst height of an industrial control data acquisition platform
- Flet教程之 05 OutlinedButton基础入门(教程含源码)
- Hands on deep learning (III) -- convolutional neural network CNN
- Function analysis and source code of hash guessing game system development
- Summary of the mistakes in the use of qpainter in QT gobang man-machine game
- What is the development of block hash quiz game system? Hash quiz game system development (case mature)
- mysql语句执行详解
猜你喜欢

Idea configuration standard notes

LeetCode+ 81 - 85 单调栈专题

What if win11u disk refuses access? An effective solution to win11u disk access denial

What if the brightness of win11 is locked? Solution to win11 brightness locking

What should I do if my computer sharing printer refuses access
![NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]](/img/79/82763392e74d102921b4e8e601d4c6.png)
NLP, vision, chip What is the development direction of AI? Release of the outlook report of Qingyuan Association [download attached]

Flet教程之 04 FilledTonalButton基础入门(教程含源码)
node强缓存和协商缓存实战示例

【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt

In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
随机推荐
Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
CDGA|数据治理不得不坚持的六个原则
[ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt
科普达人丨一文看懂阿里云的秘密武器“神龙架构”
Sword finger offer II 80-100 (continuous update)
ACM组合计数入门
分析伦敦银走势图的技巧
Idea configuration standard notes
Form组件常用校验规则-1(持续更新中~)
Practical examples of node strong cache and negotiation cache
LeetCode 7. 整数反转
How to adapt your games to different sizes of mobile screen
Après l'insertion de l'image dans le mot, il y a une ligne vide au - dessus de l'image, et la disposition est désordonnée après la suppression
2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
NetCore3.1 Json web token 中间件
Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法
acwing 3302. 表达式求值
In the face of the same complex test task, why can the elder sort out the solution quickly? Ali's ten-year test engineers showed their skills
接口設計時的一些建議
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