当前位置: 面试刷题>> 基本计算器(经典算法150题)


### 题目描述 实现一个基本的计算器来执行字符串形式的数学表达式计算。表达式仅包含非负整数、加号 `+`、减号 `-`、乘号 `*`、除号 `/` 四种运算符和空格 ` `。整数除法仅保留整数部分。 **注意**: - 输入保证有效且只包含上述字符。 - 输入字符串中的数字和运算符之间可能包含一个或多个空格。 - 你不能使用内置的库函数如 `eval()` 或其他内置的数学运算函数直接计算结果。 ### 示例 **输入**: `"3+2*2"` **输出**: `7` **输入**: `" 3/2 "` **输出**: `1` **输入**: `" 3+5 / 2 "` **输出**: `5` ### PHP 示例代码 ```php ``` ### Python 示例代码 ```python def calculate(s): s = s.replace(' ', '') # 去除空格 stack = [] num = 0 sign = '+' for char in s: if char.isdigit(): num = num * 10 + int(char) if char in '+-*/' or char == s[-1]: if sign == '+': stack.append(num) elif sign == '-': stack.append(-num) elif sign == '*': stack[-1] *= num elif sign == '/': stack[-1] = int(stack[-1] / num) num = 0 sign = char return sum(stack) # 测试 print(calculate("3+2*2")) # 输出: 7 print(calculate(" 3/2 ")) # 输出: 1 print(calculate(" 3+5 / 2 ")) # 输出: 5 ``` ### JavaScript 示例代码 ```javascript function calculate(s) { s = s.replace(/\s+/g, ''); // 去除空格 let stack = []; let num = 0; let sign = '+'; for (let char of s) { if (!isNaN(Number(char))) { num = num * 10 + parseInt(char); } if (isNaN(Number(char)) || char === s[s.length - 1]) { if (sign === '+') { stack.push(num); } else if (sign === '-') { stack.push(-num); } else if (sign === '*') { stack[stack.length - 1] *= num; } else if (sign === '/') { stack[stack.length - 1] = Math.trunc(stack[stack.length - 1] / num); } num = 0; sign = char; } } return stack.reduce((acc, curr) => acc + curr, 0); } // 测试 console.log(calculate("3+2*2")); // 输出: 7 console.log(calculate(" 3/2 ")); // 输出: 1 console.log(calculate(" 3+5 / 2 ")); // 输出: 5 ``` 以上示例代码分别用 PHP、Python 和 JavaScript 实现了基本计算器的功能,能够处理包含空格的字符串表达式,并正确执行加、减、乘、除运算。
推荐面试题