zoukankan      html  css  js  c++  java
  • 面试常用算法——解析逆波兰式

    public class Test03 {
        public static void main(String[] args) {
            String[] s = { "2", "1", "+", "3", "*" }; // 逆波兰式
    
            Stack<Double> stack = new Stack<Double>(); //
            Double a, b;
            for (int i = 0; i < s.length; i++) {
                switch (s[i]) { //这个需要jdk1.7以上版本支持
                case "+":
                    a = stack.pop();
                    b = stack.pop();
                    stack.push(a + b);
                    break;
                case "-":
                    a = stack.pop();
                    b = stack.pop();
                    stack.push(a-b);
                    break;
                case "*":
                    a = stack.pop();
                    b = stack.pop();
                    stack.push(a*b);
                    break;    
                case "/":
                    a = stack.pop();
                    b = stack.pop();
                    stack.push(a/b);
                    break;    
                default:
                    stack.push(Double.parseDouble(s[i]));
                }
            }
            System.out.println("result = "+stack.pop());
        }
    }

     改进部分代码,看起来更简洁了点

    public class Test03 {
        public static void main(String[] args) {
            String[] s = { "2", "1", "+", "3", "*" }; // 逆波兰式
    
            String operator = "+-*/";
            Stack<Double> stack = new Stack<Double>(); //
            Double a, b;
            for (int i = 0; i < s.length; i++) {
                if (!operator.contains(s[i]))
                    stack.push(Double.parseDouble(s[i]));
                else {
                    a = stack.pop();
                    b = stack.pop();
                    switch (operator.indexOf(s[i])) { 
                    case 0:
                        stack.push(a + b);
                        break;
                    case 1:
                        stack.push(a - b);
                        break;
                    case 2:
                        stack.push(a * b);
                        break;
                    case 3:
                        stack.push(a / b);
                        break;
                    }
                }
            }
            System.out.println("result = " + stack.pop());
        }
    }
  • 相关阅读:
    luogu P2685 [USACO07OPEN]抓牛Catch That Cow
    codevs 2021 中庸之道
    1018. 锤子剪刀布 (20)
    1017. A除以B (20)
    1016. 部分A+B (15)
    1013. 数素数 (20)
    1011. A+B和C (15)
    《C语言程序设计(第四版)》阅读心得(三)
    《C语言程序设计(第四版)》阅读心得(二)
    1008. 数组元素循环右移问题 (20)
  • 原文地址:https://www.cnblogs.com/YESheng/p/3664198.html
Copyright © 2011-2022 走看看