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
原创粉丝点击