import niceIO.niceInputStream; import easy.Stdio; import java.util.Stack; //import java.util.Math; public class art { private static niceInputStream in; private static Stack ops, arg; public static void main(String argv[]) { in= new niceInputStream(System.in); ops= new Stack(); arg= new Stack(); art a= new art(); } public art() { char c, o; ask("Expr: "); o= in.tegnNS(); while (o != 'q') { while( o != '\n' && o != '\r' && o != 'q') { if (o == '+') push(arg,'+'); else if (o == '-') push(arg,'-'); else if (o == '/') push(arg,'/'); else if (o == '*') push(arg,'*'); else if (o == '^') push(arg,'^'); else {in.unread(); pushs(arg,in.htall()); } o= in.tegnNS(); } while (!arg.empty()) { push(ops,pops(arg)); } askl(eval()); } } private int eval() { String s= pops(ops); int z=0; if (isInt(s)) z=intOf(s); else { if (s.equals("+")) { int a1= eval(); int a2= eval(); z= a1+a2; ask(a1); ask("+"); askl(a2); } else if (s.equals("*")) { int a1= eval(); int a2= eval(); z= a1*a2; ask(a1); ask("*"); askl(a2); } else if (s.equals("/")) { int a2=eval(); int a1=eval(); z= a2/a1; ask(a2); ask("/"); askl(a1); } else if (s.equals("-")) { int a2=eval(); int a1=eval(); z= a2-a1; ask(a2); ask("-"); askl(a1); } else if (s.equals("^")) { int a2=eval(); int a1=eval(); z= (int)Math.pow(a2,a1); ask(a2); ask("^"); askl(a1); } } return z; } private int intOf(String s) { return Integer.parseInt(s);} private boolean isInt(String s) { return Character.isDigit(s.charAt(0)); } private void askl(String s) { Stdio.promptln(s);} private void askl(int i) { Stdio.promptln(i);} private void ask(String s) { Stdio.prompt(s);} private void ask(int i) { Stdio.prompt(i);} private void push(Stack s, char c) { s.push(new String(new Character(c).toString())); } private void push(Stack s, int c) { s.push(new Integer(c)); } private void push(Stack s, String c) { s.push(new String(c)); } private void pushs(Stack s, int c) { s.push(Integer.toString(c)); } private int popi(Stack s) { return ((Integer)s.pop()).intValue(); } private String pops(Stack s) { return (String)s.pop(); } private int peeki(Stack s) { return ((Integer)s.peek()).intValue(); } private String peeks(Stack s) { return (String)s.peek(); } }