简单计算器
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 + 2 4 + 2 * 5 - 7 / 11 0
Sample Output
3.00 13.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 ; }
与君共勉
时间: 2025-01-10 14:09:48