import java.util.*;
public class test1{
public static void main(String []args)
{
Stack<String> stack1=new Stack<String>();//stack1用来保存符号
Stack<Double> stack2=new Stack<Double>();//stack2用来保存数字
Scanner input=new Scanner(System.in);
String str=input.next();
for(int i=0;i<str.length();i++)
{
char c=str.charAt(i);
if(c=='(')
continue;
else if(c=='+') {
stack1.push(c + "");
}
else if(c=='-')
stack1.push(c+"");
else if(c=='*') {
stack1.push(c + "");
}
else if(c=='/')
stack1.push(c+"");
else if(c>='0'&&c<='9')
{
String s="";
s+=c;
for(int j=i+1;j<str.length();j++)
{
char r=str.charAt(j);
if(r>='0'&&r<='9')
{
s+=r;
}
else
{
i=i+s.length()-1;
break;
}
}
stack2.push(Double.parseDouble(s));
}
else
{
String op=stack1.pop();
double v=stack2.pop();
if(op.equals("+"))
v=stack2.pop()+v;
else if(op.equals("-"))
v=stack2.pop()-v;
else if(op.equals("*"))
v=stack2.pop()*v;
else
v=stack2.pop()/v;
stack2.push(v);
System.out.println(v);
}
}
System.out.println(stack2.pop());
}
}
本程序是简单得用栈来实现表达式的求值,有一些限制:
1.不能输入负数
2.计算过程中不能出现负数
3.括号数目要和运算符数目一样
本程序也做了一点改进,可以处理多位正数,而不是单一数字