当前位置:网站首页>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;
}
边栏推荐
- 测试员的算法面试题-找众数
- How does win11 search for wireless displays? Win11 method of finding wireless display device
- PermissionError: [Errno 13] Permission denied: ‘data.csv‘
- Alibaba testers use UI automated testing to achieve element positioning
- FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet
- 奏响青春的乐章
- Talking about cookies of client storage technology
- Advantages of semantic tags and block level inline elements
- Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法
- What if the WiFi of win11 system always drops? Solution of WiFi total drop in win11 system
猜你喜欢

Common verification rules of form components -1 (continuously updating ~)

科普达人丨一文看懂阿里云的秘密武器“神龙架构”

Aiming at the "amnesia" of deep learning, scientists proposed that based on similarity weighted interleaved learning, they can board PNAS

Qt五子棋人机对战画棋子之QPainter的使用误区总结

What if the win11 shared file cannot be opened? The solution of win11 shared file cannot be opened

QT writing the Internet of things management platform 38- multiple database support

电脑页面不能全屏怎么办?Win11页面不能全屏的解决方法

伦敦银走势图分析的新方法
![[ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt](/img/0d/aa7f82fada743ea2ec23355ef954df.jpg)
[ismb2022 tutorial] the picture shows the precision medicine of learning. Marinka zitnik, Harvard University, keynote speaker, with 87 ppt

实操自动生成接口自动化测试用例
随机推荐
Redis分布式锁的实现
Managed service network: application architecture evolution in the cloud native Era
MySQL中的日期时间类型与格式化方式
2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
记一次重复造轮子(Obsidian 插件设置说明汉化)
Why is the maximum speed the speed of light
Fleet tutorial 08 introduction to AppBar toolbar Basics (tutorial includes source code)
电脑怎么保存网页到桌面上使用
Record the online bug solving list (unfinished to be continued 7/4)
NetCore3.1 Json web token 中间件
看腾讯大老如何做接口自动化测试
针对深度学习的“失忆症”,科学家提出基于相似性加权交错学习,登上PNAS
阿里测试师用UI自动化测试实现元素定位
FS4061A升压8.4V充电IC芯片和FS4061B升压12.6V充电IC芯片规格书datasheet
BFC面试简述
记一次重复造轮子(Obsidian 插件设置说明汉化)
idea配置标准注释
Common verification rules of form components -1 (continuously updating ~)
面对同样复杂的测试任务为什么大老很快能梳理解决方案,阿里十年测试工程师道出其中的技巧
LeetCode 871. 最低加油次数