实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2" 输出: 7
示例 2:
输入: " 3/2 " 输出: 1
示例 3:
输入: " 3+5 / 2 " 输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval
。
解题思路:本文没有括号,对应两种方法。
1.用栈保存每个加减号之间的数值,最后将栈中的元素相加。
2.计算每个步骤是否需要计算和,连续的加减法才计算相邻两项。
public static int calculate(String s) {
int res = 0, curRes = 0, num = 0, n = s.length();
char op = '+';
for (int i = 0; i < n; ++i) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
num = num * 10 + c - '0';
}
if (c == '+' || c == '-' || c == '*' || c == '/' || i == n - 1) {
switch (op) {
case '+': curRes += num; break;
case '-': curRes -= num; break;
case '*': curRes *= num; break;
case '/': curRes /= num; break;
}
if (c == '+' || c == '-' || i == n - 1) {
res += curRes;
curRes = 0;
}
op = c;
num = 0;
}
}
return res;
}