用js、“1+2x((10x((1+2)X3)x1)+1”的算术表达式字符串进行解析计算并给出结果(算法题、以伪代码方式写出解题过程)
时间: 2024-03-21 15:40:31 浏览: 21
伪代码如下:
1. 定义函数 parseExpression(expression),接受算术表达式字符串作为参数,返回表达式的计算结果:
2. 初始化一个空的栈 stack,用于存储数字和运算符。
3. 初始化变量 currentNumber 为 0,用于临时存储当前数字。
4. 循环遍历算术表达式字符串中的每个字符:
1. 如果当前字符是数字,将其添加到 currentNumber 的末尾,继续遍历下一个字符。
2. 如果当前字符是运算符或者是最后一个字符,将 currentNumber 转换为数字并将其推入栈中;
如果当前字符是运算符,将其推入栈中。
然后将 currentNumber 重置为 0。
3. 如果当前字符是左括号,将其推入栈中。
4. 如果当前字符是右括号,计算括号中的表达式,并将结果推入栈中。
1. 从栈中弹出一个运算符,直到遇到左括号为止。
2. 从栈中弹出数字,直到遇到左括号为止,将这些数字按照运算符进行计算,将结果推入栈中。
5. 如果当前字符是空格,则忽略它。
5. 当算术表达式字符串遍历完成后,从栈中依次弹出运算符和数字,按照运算符进行计算,直到栈为空。最终,栈中剩余的数字即为表达式的计算结果。
JavaScript 代码如下:
```javascript
function parseExpression(expression) {
const stack = [];
let currentNumber = 0;
for (let i = 0; i < expression.length; i++) {
const char = expression[i];
if (!isNaN(char)) {
currentNumber = currentNumber * 10 + parseInt(char);
}
if (isNaN(char) || i === expression.length - 1) {
if (currentNumber !== 0) {
stack.push(currentNumber);
currentNumber = 0;
}
if (char === '+' || char === '-' || char === '*' || char === '/') {
stack.push(char);
}
if (char === '(') {
stack.push(char);
}
if (char === ')') {
let operator = stack.pop();
while (operator !== '(') {
const operand2 = stack.pop();
const operand1 = stack.pop();
const result = eval(`${operand1} ${operator} ${operand2}`);
stack.push(result);
operator = stack.pop();
}
}
}
}
while (stack.length > 1) {
const operand2 = stack.pop();
const operator = stack.pop();
const operand1 = stack.pop();
const result = eval(`${operand1} ${operator} ${operand2}`);
stack.push(result);
}
return stack.pop();
}
console.log(parseExpression('1+2*((1+2)*3*1)+1')); // 输出 22
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)