package com.exam.leetcode06.leetcode0611;
import java.util.Stack;
/**
* @className test2
* @Despcription
* 计算表达式例如 (1+2)*3+4*5
* @Author 18470
* @Date 2020/6/15 9:56
* @Param
* @Return
**/
public class test2 {
public static void main(String[] args) {
String str="((1+2)*5)*3+4*5";
Stack<Integer> stacknum=new Stack();//数字栈
Stack <Character>stackfu=new Stack();//符号栈
for (int i = 0; i <str.length() ; i++) {
char c=str.charAt(i);
if(c>'0'&&c<'9'){
stacknum.push(c-'0');
//有乘除就先算
if(!stackfu.isEmpty()&&(stackfu.peek()=='*'||stackfu.peek()=='/')&&stacknum.size()>=2){
int a = (calculate(stacknum.pop(), stacknum.pop(), stackfu.pop()));
stacknum.push(a);
}
}
else if(c=='+'||c=='-'||c=='(') {
stackfu.push(c);
}
else if(c=='*'||c=='/') {
stackfu.push(c);
}
else if(c==')'){
while (stackfu.peek()!='(') {
int a = (calculate(stacknum.pop(), stacknum.pop(), stackfu.pop()));
stacknum.push(a);
}
stackfu.pop();
}
}
while (stacknum.size()!=1){
int a=(calculate(stacknum.pop(),stacknum.pop(),stackfu.pop()));
stacknum.push(a);
}
System.out.println(stacknum.pop());
}
public static int calculate(int a,int b,char c){
if(c=='+'){
return a+b;
}else if(c=='-'){
return a-b;
}else if(c=='*'){
return a*b;
}else
return a/b;
}
}
java 计算简单算术表达式
最新推荐文章于 2024-08-11 23:26:26 发布