美文网首页
[编程题] 奇怪的表达式求值

[编程题] 奇怪的表达式求值

作者: 六尺帐篷 | 来源:发表于2017-08-10 14:03 被阅读36次

    常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 )。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少
    输入描述:
    输入为一行字符串,即一个表达式。其中运算符只有-,+,
    。参与计算的数字只有0~9.
    保证表达式都是合法的,排列规则如样例所示。

    输出描述:
    输出一个数,即表达式的值

    输入例子1:
    3+5*7

    输出例子1:
    56

    代码

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            while(in.hasNext()) {
                String s = in.next();
                solve(s);
            }
            
        }
        
        private static void solve(String s) {
            
            String operators = "+-*";
            
            Stack<Integer> stack = new Stack<>();
            Stack<Character> os = new Stack<>();
            
            for(int i=0;i<s.length();i++) {
                if(s.charAt(i)>='0' && s.charAt(i)<='9') {
                    stack.push(Integer.valueOf(s.charAt(i)+""));
                    if(stack.size() == 2) {
                        int a = stack.pop();
                        int b =stack.pop();
                        if(os.peek() == '+') {
                            stack.push(a+b);
                        }
                        else if(os.peek() == '-')
                            stack.push(b-a);
                        else if(os.peek() == '*')
                            stack.push(b*a);
                    }
                }
                else {
                    os.push(s.charAt(i));
                }
            }
            System.out.println(stack.pop());
        }
    }
    

    相关文章

      网友评论

          本文标题:[编程题] 奇怪的表达式求值

          本文链接:https://www.haomeiwen.com/subject/fejhrxtx.html