C++ 实现:只含加乘无括号表达式的值求解及代码详解
```cpp #include <iostream> #include <string> #include <stack> using namespace std; // 计算表达式的值 int calculateExpression(const string& expression) { stack<int> numbers; int currentNumber = 0; char lastOperator = '+'; for (size_t i = 0; i <= expression.length(); ++i) { if (i < expression.length() && isdigit(expression[i])) { // 提取当前数字 currentNumber = currentNumber * 10 + (expression[i] - '0'); } else { if (lastOperator == '+') { // 遇到 '+' 运算符,将当前数字压入栈 numbers.push(currentNumber); } else if (lastOperator == '*') { // 遇到 '*' 运算符,取出栈顶数字与当前数字相乘 int top = numbers.top(); numbers.pop(); numbers.push(top * currentNumber); } // 更新当前数字和最后运算符 currentNumber = 0; if (i < expression.length()) { lastOperator = expression[i]; } } } int result = 0; // 累加栈中所有数字 while (!numbers.empty()) { result += numbers.top(); numbers.pop(); } return result; } int main() { string expression; cin >> expression; // 计算表达式的值 int result = calculateExpression(expression); // 处理结果长度多于 4 位的情况 if (result >= 10000) { result %= 10000; } cout << result << endl; return 0; } ``` 代码解释 1. `calculateExpression` 函数: - 该函数接受一个字符串类型的表达式作为参数,用于计算表达式的值。 - 使用一个栈 `numbers` 来存储数字。 - `currentNumber` 用于临时存储当前正在解析的数字。 - `lastOperator` 用于记录上一个运算符,初始为 `+`。 - 遍历表达式中的每个字符: - 如果是数字,将其累加到 `currentNumber` 中。 - 如果是运算符,根据 `lastOperator` 的值进行相应操作: - 如果是 `+`,将 `currentNumber` 压入栈。 - 如果是 `*`,取出栈顶数字与 `currentNumber` 相乘,再将结果压入栈。 - 更新 `currentNumber` 和 `lastOperator`。 - 将栈中所有数字累加得到最终结果。 2. `main` 函数: - 读取输入的表达式。 - 调用 `calculateExpression` 函数计算表达式的值。 - 如果结果长度多于 4 位,取结果的后 4 位。 - 输出最终结果。 复杂度分析 - 时间复杂度:$O(n)$,其中 $n$ 是表达式的长度。 - 空间复杂度:$O(m)$,其中 $m$ 是表达式中数字的数量。 ######[AI问答 | 730点数解答 | 2025-11-26 20:12:36]
- 递归下降语法分析程序实例:从文法到 C 代码的完整实现(字节豆包 | 1371点数解答 | 2024-12-12 22:46:04)260
- SQL 实现:精准查询 20 岁选课学生学号、姓名、平均与总成绩(去重取最高) (字节豆包 | 116点数解答 | 2024-10-21 00:46:57)211
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)226
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)354
- JavaScript 开发揭秘:表达式 {{data}} 的工作原理及模板字符串应用(阿里通义 | 226点数解答 | 2023-11-09 01:17:26)244
- 揭秘!Angular表达式 {{yourmodel}} 的工作原理与灵活应用(阿里通义 | 187点数解答 | 2023-11-09 01:18:41)212
- Python 实现实数四则运算:输入表达式输出结果,处理除零与格式错误(字节豆包 | 286点数解答 | 2024-11-17 11:21:58)126
- C 语言实现:输入实数四则运算式输出保留两位小数结果(含特殊情况处理) (字节豆包 | 320点数解答 | 2024-11-17 11:22:27)143
- iOS开发:手把手教你完整实现代理模式,含声明与实现步骤!(阿里通义 | 268点数解答 | 2023-11-08 00:39:55)250