HDU 1237 简单计算器
来源:互联网 发布:销售部数据流程图 编辑:程序博客网 时间:2024/06/04 18:37
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
理清思路就很简单。我们只要把减法,乘法,除法全部转换为加法,然后把栈中的全部元素相加就行了。那么,如何转换呢?
减法:将这个数的相反数存到栈中
乘法:向下读一个数,然后从栈顶取出一个数,两个数相乘之后压入栈中
除法和乘法相似;
最后求出栈中的全部元素之和就行了
#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;}
0 0
- HDU 1237 简单计算器
- HDU 1237 简单计算器
- hdu 1237 简单计算器
- HDU 1237 简单计算器
- hdu 1237 简单计算器
- hdu 1237 简单计算器
- hdu - 1237 - 简单计算器
- hdu 1237 简单计算器
- HDU-简单计算器-1237
- hdu 1237简单计算器
- hdu 1237 简单计算器
- hdu 1237 简单计算器
- HDU 1237 简单计算器
- HDU 1237简单计算器
- hdu 1237 简单计算器
- HDU 1237 简单计算器
- HDU-1237-简单计算器
- HDU-1237-简单计算器
- 黑马程序员———正则表达式及其其他类
- OpenCV训练分类器制作xml文档
- TCP/IP详解学习笔记
- 人民币阿拉伯数字转中文大写
- 如何利用OpenCV自带的haar training程序训练分类器
- HDU 1237 简单计算器
- HDU 5387 Clock // 模拟
- Redis对于key的操作命令
- 进程间通信总结
- Javascript - StringBuilder
- BroadcastReceiver的简单使用
- 问题:交叉编译
- mysql数据库只能本地连接,其他电脑不能连接
- shell编程