hdu 1237 简单计算器 逆波兰~~
来源:互联网 发布:天猫数据平台啥样 编辑:程序博客网 时间:2024/05/20 17:38
简单计算器
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13852 Accepted Submission(s): 4613
Problem Description
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 24 + 2 * 5 - 7 / 110
Sample Output
3.0013.36
代码:
#include <iostream>#include <stack>#include <sstream>#include <string>#include <iomanip>using namespace std ;stack<double> num ;stack<char> oper ;void compute(char op){double a = num.top() ;num.pop() ;double b = num.top() ;num.pop() ;switch(op){case '-' : num.push(b-a) ; break ;case '+' : num.push(b+a) ; break ;case '*' : num.push(b*a) ; break ;case '/' : num.push(b/a) ; break ;default : break ;}}int main(){string s ;while(getline(cin,s) && s != string("0")){s.push_back(' ') ;s.push_back('=') ;stringstream st(s) ;int n ;char op ;while(st>>n>>op){num.push(n) ;if(op == '+' || op == '-'){while(!oper.empty()){char c = oper.top() ;oper.pop() ;compute(c) ;}oper.push(op) ;}else if(op == '*' || op == '/' ){while(!oper.empty() && (oper.top() == '*' || oper.top() == '/' )){char c = oper.top() ;oper.pop() ;compute(c) ;}oper.push(op) ;}else if(op == '='){while(!oper.empty()){char c = oper.top() ;compute(c) ;oper.pop() ;}cout << fixed << setprecision(2);cout << num.top() << endl;num.pop() ;break ;}}}return 0 ;}
与君共勉
0 0
- hdu 1237 简单计算器 逆波兰~~
- HDU 1237 简单计算器 逆波兰表达式
- 简单逆波兰计算器
- 简单计算器-逆波兰式
- HDOJ 题目1237简单计算器(栈,逆波兰式)
- 简单的逆波兰基本计算器
- HDU1237 简单计算器 【栈】+【逆波兰式】
- 逆波兰式 HDU1237 简单计算器
- 逆波兰计算器
- 计算器 | 逆波兰表达式
- 逆波兰实现计算器
- 逆波兰计算器
- 逆波兰表达式计算器
- 逆波兰计算器
- 逆波兰计算器
- 逆波兰计算器
- 逆波兰计算器:
- 逆波兰计算器
- java web初学者 jsp+javabean+servlet 登陆
- 关于SSH中代码中代码简单重构
- (5.1.2)计算机网络基础之物理层
- Qt
- C语言流程控制
- hdu 1237 简单计算器 逆波兰~~
- opencms自定义文章类型
- eclipse *.vm 文件,语法高亮
- Evil Straw Warts Live (Uva10716 回文串+贪心)
- CoreData基本使用
- Linux下修改Mysql的用户(root)的密码(以及忘记密码)
- NGUI实现分数增涨
- win7系统中主分区改为逻辑分区方法
- OSG