HDU 1237
http://acm.hdu.edu.cn/showproblem.php?pid=1237
表达式计算,方法是中缀转后缀,再计算。中间处理用栈操作
讲解看http://blog.csdn.net/antineutrino/article/details/6763722
这题是简易版本的,不用处理括号
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack> using namespace std; int cmp(char a, char b) {
if((a == '*' || a == '/') && (b == '+' || b == '-')) return ;
return ;
} double cal(double a, double b, char c) {
if(c == '+') return a + b;
if(c == '-') return a - b;
if(c == '*') return a * b;
if(c == '/') return a / b;
} int main() {
double a;
while(~scanf("%lf", &a)) {
char c;
c = getchar();
stack <char> s1;
stack <double> s2;
if(!a && c=='\n') break;
s2.push(a);
c = getchar();
while(~scanf("%lf", &a)) {
if(s1.empty()) {
s1.push(c);
}
else {
if(cmp(c, s1.top())) s1.push(c);
else {
while() {
double t1 = s2.top();
s2.pop();
double t2 = s2.top();
s2.pop();
char t3 = s1.top();
s1.pop();
double t4 = cal(t2, t1, t3);
s2.push(t4);
if(s1.empty() || cmp(c, s1.top())) {
s1.push(c);
break;
}
}
}
}
s2.push(a);
if(getchar() == '\n') break;
c = getchar();
}
while(!s1.empty()) {
double t1 = s2.top();
s2.pop();
double t2 = s2.top();
s2.pop();
char t3 = s1.top();
s1.pop();
double t4 = cal(t2, t1, t3);
s2.push(t4);
}
printf("%.2lf\n", s2.top());
}
return ;
}
HDU 1237的更多相关文章
- hdu 1237 简单计算器
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式, ...
- *HDU 1237 栈
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1237 简单计算器 栈
额,题目是中文的,题意就不用说了= =都看懂喽.写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就 ...
- hdu 1237 简单计算器 (表达式求值)【stack】
<题目链接> 题目大意: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符, ...
- 随手练——HDU 1237 表达式求值(输入格式典型)
坑了老子半天,结果是 float 范围不够!!! 基本思想: 开一个符号栈,一个数字栈: 碰到数字就入栈,碰到符号就与栈顶符号进行对比,如果当前符号优先级小于栈顶符号,数字栈弹出两个数进行栈顶符号运算 ...
- hdu 1237 简单计算器(栈处理)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1237 简单计算器(栈+stringstream)
提供几份代码,这题的输入可以用stringsteam处理,先处理乘除后处理加减,正常思路,但是后面统计加减法的时候,对栈的运用错了,我用的时候相当于给它多加了几个括号就错了. 正确的简单解法就是,加法 ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- 【留念贴】Android开发——计算器
[过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...
随机推荐
- 使用MLeaksFinder检测项目内存泄露总结
前几天看到开源工具MLeaksFinder,决定用在公司的项目中试一下,效果很不错,用法也很简单,直接把项目文件夹拖到项目中就可以了,依靠这个项目,我发现公司项目中有不少内存泄露的地方,在此总结一下: ...
- jmeter
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件. ...
- go语言环境搭建
1.官网https://golang.org/dl/下载go语言的执行器 2.此处以Windows操作系统上安装go为例,安装go1.7.3.windows-amd64.msi 3.配置go环境变量, ...
- RMAN 参数详解
使用RMAN>show all;可以显示出RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # defaultCONFIGURE B ...
- qt 编译问题总结
1)使用make命令编译Qt原码时出现了 /usr/bin/ld: cannot find -lXrender 问题: /usr/bin/ld: cannot find -lXrender ...
- Linux中常用操作命令
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- Adapter 代码中启动报错
安装好Adapter之后,在designer中可以启动Adapter,但在代码中启动却总是报错,“could not create RVMQSession"或者是“native implem ...
- google api autocomplete
<input class="flex-item" id="autocomplete" placeholder="address, zip or ...
- SYN攻击
一.TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服 ...
- mysql语句中日期函数和日期的加减运算
一.秒数和时钟格式的互相转化 SEC_TO_TIME(seconds) 返回seconds参数,变换成小时.分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字. ...