题目描述:
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例1:
输入:"3+2*2"
输出:7
示例2:
输入:"3/2"
输出:1
示例3:
输出:"3+5/2"
输出:5
说明:
1、你可以假设所给定的表达式都是有效的。
2、请不要使用内置的库函数eval。
import java.util.Stack;
public class osts {
public int calculate(String s) {
s = s.trim();
int sign=1; //sign表示加减符号
int msign=0; //msign表示乘除符号,1表示乘法,-1表示除法,0表示不操作
int num=0;
int len=s.length();
Stack stack=new Stack<>();
for(int i=0;i<len;i++){
char ch=s.charAt(i);
if(Character.isDigit(ch)){
num=ch-'0';
while(i+1<len&&Character.isDigit(s.charAt(i+1)))
num=num*10+s.charAt(++i)-'0';
if(msign==1)//乘法
{
stack.push(stack.pop()*num);
msign=0;
}
else if(msign==-1)//除法
{
stack.push(stack.pop()/num);
msign=0;
}
else //加减
stack.push(sign*num);
}
else if(ch=='+')
sign=1;
else if(ch=='-')
sign=-1;
else if(ch=='*')
{
msign=1;
}
else if(ch=='/')
msign=-1;
}
int res=0;
while(!stack.isEmpty())
res+=stack.pop();
return res;
}
public static void main(String[] args){
String s ="3+5/2";
osts osc=new osts();
System.out.println(osc.calculate(s));
}
}