#include <iostream> #include <stack> #include <string> #include <sstream> #include <iomanip> using namespace std; double calculate(string s) { stack<double> st; int n = s.size(); for (int i = n - 1; i >= 0; i--) { if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') { if (st.empty()) return 0; // 栈为空时返回0 double b = st.top(); st.pop(); if (st.empty()) return 0; // 栈为空时返回0 double a = st.top(); st.pop(); if (s[i] == '+') st.push(a + b); if (s[i] == '-') st.push(a - b); if (s[i] == '*') st.push(a * b); if (s[i] == '/') st.push(a / b); } else if (s[i] >= '0' && s[i] <= '9' || s[i] == '.') { int j = i; while (j >= 0 && (s[j] >= '0' && s[j] <= '9' || s[j] == '.')) j--; j++; string num = s.substr(j, i - j + 1); stringstream ss(num); double x = 0; ss >> x; st.push(x); i = j; } } if (st.empty()) return 0; // 栈为空时返回0 return st.top(); } int main() { string expr; while (getline(cin, expr)) { double res = calculate(expr); cout << fixed << setprecision(2) << res << endl; } return 0; },这是代码
时间: 2024-04-27 20:22:52 浏览: 73
#include <iostream>
这段代码实现了一个计算表达式的功能,其中calculate函数的参数为一个表达式字符串s,返回值为表达式的计算结果。主函数中通过不断读入表达式字符串,并调用calculate函数来计算表达式结果,并输出结果。具体实现过程是利用栈来存储数字和运算符,并从右往左遍历表达式字符串,遇到数字就入栈,遇到运算符就从栈中弹出两个数字进行计算,并将计算结果入栈,最后栈中剩下的数字就是表达式的计算结果。
至于你提到的预期结果和实际结果的问题,我需要更多的上下文信息才能回答你的问题。请告诉我你输入的表达式是什么,以及你得到的结果和预期结果分别是多少。
阅读全文