面试题 计算器
难度 中等
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数
eval
。
代码实现(Java)
public int calculate(String s) {
Stack<Integer> nums = new Stack<>();char[] chars = s.toCharArray();int len=s.length();int res=0;
for(int i=0;i<len;){
if(chars[i]==' '){
i++;
continue;
}
char temp=chars[i];
if(temp=='+'||temp=='-'||temp=='*'||temp=='/'){
i++;
while(i<len && chars[i]==' '){
i++;
}
}
int num=0;
while(i<len&&Character.isDigit(chars[i])){
num=num*10+(int)chars[i]-48;
i++;
}
switch (temp){
case '-':
num=-num;break;
case '*':num=nums.pop()*num;break;
case '/':num=nums.pop()/num;break;
default:break;
}
nums.push(num); }
while(!nums.isEmpty()){
res+=nums.pop(); }
return res;
}