后缀算数表达式 21 8 * 3 4 10 7 - * /结果是多少?怎么算这个啊???急求

解决方案 »

  1.   

    [[size=24px]size=11px]大家好原题目是这个 
    21 8 * 3 * 4 10 7 - * /
    [/size][/size]
      

  2.   

    import java.util.ArrayDeque;
    import java.util.Deque;enum TokenType {NUM, OP}class Token {
    public Token(TokenType type, float value, char op) {
    this.type = type;
    this.value = value;
    this.op = op;
    }
    public TokenType type;
    public float value;
    public char op;
    }public class Main { public static void main(String[] args) {
    String s = "21 8 + 3 * 4 10 7 - * /";
    String[] tokens = s.split("\\s");
    Deque<Token> stack = new ArrayDeque<Token>();
    Token token = null;
    Token num1, num2;
    for(String t:tokens) {
    token = createToken(t);
    switch(token.type) {
    case NUM:
    stack.push(token);
    break;
    case OP:
    num2 = stack.pop();
    num1 = stack.pop();
    stack.push(calculate(num1, num2, token));
    break;
    }
    }
    System.out.println(stack.pop().value);
    } private static Token createToken(String s) {
    Token result = null;
    if(s.charAt(0)>='0' && s.charAt(0)<='9') {
    result = new Token(TokenType.NUM, Float.parseFloat(s), ' ');
    }else {
    result = new Token(TokenType.OP, 0.0f, s.charAt(0));
    }
    return result;
    }

    private static Token calculate(Token num1, Token num2, Token op) {
    float value = 0.0f;
    switch(op.op) {
    case '+':
    value = num1.value + num2.value;
    break;
    case '-':
    value = num1.value - num2.value;
    break;
    case '*':
    value = num1.value * num2.value;
    break;
    case '/':
    value = num1.value / num2.value;
    break;
    }
    return new Token(TokenType.NUM, value, ' ');
    }
    }
      

  3.   

    21 8 * 3 * 4 10 7 - * /
    --->168 3 * 4 10 7 - * /
    --->504 4 10 7 - * /
    --->504 4 3 * /
    --->504 12 /
    --->42结果子42
      

  4.   

       21 8 + 3 * 4 10 7 - * / 
    --->29 3 * 4 10 7 - * /
    --->87 4 10 7 - * /
    --->87 4 3 * /
    --->87 12 /
    --->29/4