Expression

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 202    Accepted Submission(s): 61

Problem Description
  As a shopkeeper of a restaurant,everyday ,dandelion's mother needs to calculate the incomes.Sometimes,she may make some mistakes.So dandelion wants you to write a program to help her calculate the value of some expressions.   You may consider every expression is made of :left parenthesis '(' ,right parenthesis ')' , plus sign '+' , subtraction sign '-' , multiplication sign '*' ,positive sign '+' ,and negative sign '-'.There is no precursor 0.The length of expression will not exceed 100.The value produced during the calculating will not exceed 10^9.Every expression is legal.Ie. ((10+(-100))) ,-(-1),-3*(+5+7*2)-(0) ,-0 ,(-3)*(-5+7) are legal,while 1+-7 ,--3+8 ,-3+() are illegal.
 
Input
There are several cases,every line contains a expression.
 
Output
For every case ,print the answer of the expression.
 
Sample Input
-3*(+5-7*2)-(0)
 
Sample Output
27
 
Author
dandelion
 
Source
 
 
栈的运用 考虑的比较多 使用  STL <stack>
详细的看注释
#include<bits/stdc++.h>
using namespace std;
char a[105];
stack<char> m;//运算符栈
stack<int> n;//操作室栈
map<char,int> mp;
//40 (
//41 )
//42 *
//43 +
//45 -
int main()
{
mp['-']=1;
mp['+']=1;
mp['*']=2;
mp['(']=-1;
mp[')']=-1;
memset(a,0,sizeof(a));
while(gets(a))
{ while(!m.empty())
m.pop();
while(!n.empty())
n.pop();
n.push(0);//考虑初始有符号 放在栈底
int len=strlen(a);
int exm=0;
int xx,yy;
char what;
for(int i=0; i<len; i++)
{
if(a[i]>=48&&a[i]<=57)
exm=exm*10+a[i]-'0';
else
{
if(a[i]=='(')// 前括号处理 添0 处理紧邻的符号
{
m.push(a[i]);
n.push(0);
continue;
}
if(m.empty())//若运算符栈为空
{
m.push(a[i]);
continue;
}
else
{
if(mp[a[i]]>mp[m.top()]) //优先级大于栈顶运算符
m.push(a[i]);
else
{//直到优先级大于栈顶 或 栈空 或栈顶为后括号(这个没有验证)
while(!m.empty()&&mp[a[i]]<=mp[m.top()]&&m.top()!='(')// 这里理解
{
xx=n.top();
n.pop();
yy=n.top();
n.pop();
what=m.top();
m.pop();
if(mp[what]==1)
{
if(what=='+')
n.push(yy+xx);
if(what=='-')
n.push(yy-xx);
}
if(mp[what]==2)
n.push(yy*xx);
}
if(!m.empty()&&m.top()=='('&&a[i]==')') //当前后括号相遇pop
m.pop();
else //否则插入
m.push(a[i]); }
continue;
}
}
if(i>=1)//处理前括号后若无符号
{
if(a[i-1]=='(')
n.pop();
}
if(mp[a[i+1]]!=0)//判断exm 积累结束
{
n.push(exm);
exm=0;
}
if(i==len-1&&a[i]!=')')//考虑最后一个操作数
n.push(exm); }
while(!m.empty())//直到 运算符栈空
{
xx=n.top();
n.pop();
yy=n.top();
n.pop();
what=m.top();
m.pop();
if(mp[what]==1)
{
if(what=='+')
n.push(yy+xx);
if(what=='-')
n.push(yy-xx);
}
if(mp[what]==2)
n.push(yy*xx);
}
printf("%d\n",n.top());//输出栈顶值
memset(a,0,sizeof(a));
}
return 0;
}

HDU 2646 栈的应用 STL的更多相关文章

  1. HDU - 1022 Train Problem I STL 压栈

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. hdu 1022 Train Problem I(栈的应用+STL)

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. 解决HDU爆栈的问题

    转载:http://forum.byr.edu.cn/article/ACM_ICPC/51264 大家懂的,鉴于HDU用的是windows服务器,所以stack大小及其坑爹,稍微深一点的递归栈就会s ...

  4. hdu 6040 Hints of sd0061(stl: nth_element(arr,arr+k,arr+n))

    Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  5. 数据结构--栈(附上STL栈)

    定义: 栈是一种只能在某一端插入和删除数据的特殊线性表.他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出).因此栈 ...

  6. ACM YTU 十进制与八进制的转换 (栈和队列) STL栈调用

    十进制与八进制的转换(栈和队列) Description 对于输入的任意一个非负十进制整数,利用栈打印输出与其等值的八进制数. Input 111 Output 157 Sample Input 14 ...

  7. UVa - 12096 集合栈计算机(STL)

    [题意] 有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两 ...

  8. *HDU 1237 栈

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. hdu 2094 产生冠军(STL,set)

    题目 //把所有的出现的名字开始默认都为冠军(1),然后输了的置为0,表示不为冠军,最后统计不为0的, //当有且只有一个不为0的,这个就为冠军,否则,不能产生冠军. //以上思路来自别人的博客.. ...

随机推荐

  1. Redis4.0支持的新功能说明

    本文以华为云DCS for Redis版本为例,介绍Redis4.0的新功能.文章转载自华为云帮助中心. 与Redis3.x版本相比,DCS的Redis4.x以上版本,除了开源Redis增加的特性之外 ...

  2. 理解Python中的__builtin__和__builtins__

    以Python 2.7为例,__builtin__模块和__builtins__模块的作用在很多情况下是相同的. 但是,在Python 3+中,__builtin__模块被命名为builtins. 所 ...

  3. tensorflow学习笔记(4)-学习率

    tensorflow学习笔记(4)-学习率 首先学习率如下图 所以在实际运用中我们会使用指数衰减的学习率 在tf中有这样一个函数 tf.train.exponential_decay(learning ...

  4. 5.azkaban权限管理

    权限简介 user 登录azkaban的用户 注意,如果不给用户roles groups,则用户就是普通用户,只能创建\查看\执行\调度自己的任务,不能看别人的 group group:用户的集合,给 ...

  5. 关于localStorage的实际应用

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  6. Thunder团队第一周 - Scrum会议2

    Scrum会议2 小组名称:Thunder 项目名称:待定 Scrum Master:李传康 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康(M ...

  7. 学霸系统PipeLine功能规格说明书

    学霸系统PipeLine功能规格说明书共分为以下三部分: 1.产品面向用户群体 2.用户使用说明 3.产品功能具体实现 1.产品面向用户群体 我们这组的项目并不是传统意义上能发布并进行展示的项目,因此 ...

  8. ubuntu apache nginx 启动 关闭

    转载自:http://www.comflag.com/2011/05/01/apache-web.htm 电影<社交网络>中,facebook创始人马克.扎克失恋后入侵哈佛大学宿舍楼服务器 ...

  9. 后端设置cookie写不到前端页面

    javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("id",session.getId()); co ...

  10. lintcode-178-图是否是树

    178-图是否是树 给出 n 个节点,标号分别从 0 到 n - 1 并且给出一个 无向 边的列表 (给出每条边的两个顶点), 写一个函数去判断这张`无向`图是否是一棵树 注意事项 你可以假设我们不会 ...