题目描述:
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出:
3.00
13.36
来源:

2006年浙江大学计算机及软件工程研究生机试真题

注:表达式的运算是栈的一个经典应用,利用这个题来熟悉栈

代码如下:

#include <stdio.h>
#include <stack>
using namespace std;stack<int> op;
stack<double> in;
char str[201];
int mat[5][5]={/*   + - * / */
/*0标记*/  1,0,0,0,0,
/* +  */   1,0,0,0,0,
/* -  */   1,0,0,0,0,
/* *  */   1,1,1,0,0,
/* /  */   1,1,1,0,0,};void GetOp(bool &reto,int &retn,int &i)
{   //若i=0且运算符栈为空,则添加一个人为的起止标记符 0,便于最后判断是否结束 if(i==0&&op.empty()==true){reto=true;retn=0;return;}//如果str[i]==0,即为Null,说明字符扫描到头,这时要再添加一个起止标记符 0 ,这样堆栈中有两个 0,满足条件跳出循环 if(str[i]==0){reto=true;retn=0;return;}//如果为数字 ,先标记为false if(str[i]>'0'&&str[i]<'9'){reto=false;} else{reto=true;switch(str[i]){case '+':retn=1;break;case '-':retn=2;break;case '*':retn=3;break;case '/':retn=4;break; }i+=2;//跳过本字符和下一个空格return;    }//继续数字的情况,因为数字可能为多位数,此时连续扫描单个字符,要计算数字的真值 retn=0; for(;str[i]!=' '&&str[i]!=0;i++){retn*=10;retn+=str[i]-'0';}//如果str[i]为空格则还未遍历完,修改i的值以继续遍历if(str[i]==' ') i++; return;}int main(int argc, char** argv) {while(gets(str))//输入字符串,当其位于文件尾时,gets返回0 {if(str[0]=='0'&&str[1]==0) break;//当输入只有一个0时结束循环 bool IsOp;int dat;int i=0;while(!op.empty()) op.pop();while(!in.empty()) in.pop();while(true){GetOp(IsOp,dat,i);//如果是数字就直接压栈 if(IsOp==false){in.push(dat);}else{   //如果遍历的为第一个字符(把起止标记符压栈)或者下个运算符优先级高于栈顶运算符 ,则直接入栈 if(op.empty()==true||mat[dat][op.top()]==1){op.push(dat);}//如果优先级低于栈顶 else{while(mat[dat][op.top()]==0){double a=in.top();in.pop();double b=in.top();in.pop();int cal = op.top();op.pop();if(cal==1) in.push(b+a);else if(cal==2) in.push(b-a);else if(cal==3) in.push(b*a);else  in.push(b/a);//这里一定要注意a,b 的前后顺序,谁是先出栈的谁是被加/减/乘/除数 }//把运算符压栈 op.push(dat);}}//如果只剩下两个起止符号,说明已经结束 if(op.size()==2&&op.top()==0)break;     }printf("%.2lf\n",in.top());}return 0;
}

九度OJ 1019 简单计算器相关推荐

  1. 九度OJ 1019:简单计算器 (基础题、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6725 解决:2454 题目描述: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入: 测试输入包含若干 ...

  2. 九度 oj 1019

    题目描述: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 输入: 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔 ...

  3. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

  4. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  5. Freckles - 九度 OJ 1144

    Freckles - 九度 OJ 1144 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: In an episode of the Dick Van Dyke show, l ...

  6. 非常可乐(九度 OJ 1457)

    非常可乐(九度 OJ 1457) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 1.题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是 seeyou 却不这么认为.因为每次当 see ...

  7. 九度OJ 题目1179:阶乘

    /********************************* * 日期:2013-2-8 * 作者:SJF0115 * 题号: 九度OJ 题目1179:阶乘 * 来源:http://ac.jo ...

  8. 九度OJ——1028继续畅通工程

    题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修 ...

  9. Leagal or Not - 九度 OJ 1448

    Leagal or Not - 九度 OJ 1448 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: ACM-DIY is a large QQ group where man ...

最新文章

  1. pycharm 使用小结
  2. libpcap-mmap分析(五)
  3. 在MAC上给Anaconda的python安装tensorflow
  4. 刷新SqlServer所有视图【存储过程】
  5. Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。
  6. [html] 使用canvas制作一个印章
  7. 《梦断代码》读书笔记1
  8. gitlab 只能owner 上传_代码管理-gitlab使用方法建议
  9. 中国风吉祥纹样底纹背景,艾草绿和天青色趋势色彩
  10. 如何区分两列中不同数据_如何区分原装数据线和山寨数据线
  11. alibaba 实体转json_JAVA中使用alibaba fastjson实现JSONObject、Object、Json字符串的转换...
  12. 任务方案思考:句子相似度和匹配
  13. HTML和XHTML解析(HTMLParser、BeautifulSoup)
  14. Linux宝库快讯 | OpenInfra中国日正式确定会议合作方
  15. MySQL5.5安装教程+SQLyog安装
  16. Discuz收费插件模版合集包;discuz大部分插件下载地址;http://pan.baidu.com/s/1nt5hwU1
  17. (2022年6月)注册ArcGIS Online(Learn ArcGIS) 21天免费账号笔记
  18. 计算机硬盘怎么看坏了,SSD固态硬盘坏掉怎么看?有哪几种征兆?
  19. Linux下线程池概念详解以及代码演示
  20. ipad协议827版技术分析

热门文章

  1. python语音播报天气预报_树莓派之天气预报语音播报
  2. 员工、领导、工资、前途
  3. 如何正确使用 HTTP proxy
  4. python跳出循环关键字_Python跳出for循环continue与break的区别
  5. 解锁iPhone密码的三种方法
  6. 苹果6怎样打开html,苹果6屏幕旋转怎么设置 怎么开启和关闭【图文】
  7. 中原证券通达信个股期权全真模拟交易客户端
  8. RMQ-ST 解决在线LCA
  9. 揭秘LOL背后的IT基础架构丨微服务生态系统
  10. 警惕!最常见的三类诈骗短信