前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[编程题] 奇怪的表达式求值代码

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

作者头像
desperate633
发布2018-08-27 16:34:28
3390
发布2018-08-27 16:34:28
举报
文章被收录于专栏:desperate633

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

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

输入例子1: 3+5*7

输出例子1: 56

代码

代码语言:javascript
复制
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());
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档