HDU 1237 简单计算器
2015-08-13 23:29
337 查看
HDU 1237 简单计算器
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
理清思路就很简单。我们只要把减法,乘法,除法全部转换为加法,然后把栈中的全部元素相加就行了。那么,如何转换呢?
减法:将这个数的相反数存到栈中
乘法:向下读一个数,然后从栈顶取出一个数,两个数相乘之后压入栈中
除法和乘法相似;
最后求出栈中的全部元素之和就行了
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
理清思路就很简单。我们只要把减法,乘法,除法全部转换为加法,然后把栈中的全部元素相加就行了。那么,如何转换呢?
减法:将这个数的相反数存到栈中
乘法:向下读一个数,然后从栈顶取出一个数,两个数相乘之后压入栈中
除法和乘法相似;
最后求出栈中的全部元素之和就行了
[code] #include<cstdio> #include<cstring> #include<algorithm> #include<stack> using namespace std; int main() { #ifndef ONLINE_JUDGE freopen("1.txt", "r", stdin); #endif stack<double>s; int n; double m; char c; while(scanf("%d", &n)) { c = getchar(); if (n == 0 && c == '\n') { break; } s.push(n); c = getchar(); while(scanf("%d", &n)) { if (c == '+') { s.push(n); } else if (c == '-') { s.push(0 - n); } else if (c == '*') { m = s.top(); s.pop(); m *= n; s.push(m); } else if (c == '/') { m = s.top(); s.pop(); m /= n; s.push(m); } c = getchar(); if (c == '\n') { break; } c = getchar(); } m = 0; while (!s.empty()) { m += s.top(); s.pop(); } printf("%.2lf\n", m); } return 0; }
相关文章推荐
- 使用OGG的logdump工具检查OGG trail file中存在不存在相关表的记录
- LeetCode——Count Complete Tree Nodes
- iOS 获取wifi ssid 名称
- 一种列出所有可能组合的算法
- (二)DTD文档类型定义文件简介
- RecyclerView的使用
- linux设备模型(四 platform )
- OpenCV学习笔记:如何训练级联分类器
- [2015-08-11] python022
- zookeeper 分布式锁
- 实体对象模型中使用自跟踪实体分离Model和Context
- 单向链表
- 智能设备只依托加速度感应计算距离是否可行?
- 自助注册美国公司
- 处理浮点数的状态机
- FrameSize、WinSize、VisibleSize、VisibleOrigin概念理解
- 十个让你成为优秀程序员的有效方法
- 使用行列式公式求多边形面积
- 类初始化与类对象初始化
- Windows 商店应用程序异步执行task和调整task优先级