常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, – 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少

输入描述:

输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。

输出描述:

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

输入例子:

3+5*7

输出例子:

56

1 2 收藏


直接登录
最新评论
  • yzy1874   04/06

    我上次也做这个题了,不过当时技艺不佳,分字符串都得百度,没做出来。今天看到了,又敲了下,应该可以优化吧,现在也不佳……

    • 不知道这个效率怎么样,大家看看。

  • loredp 互联网 04/07

  • Summer   04/07

    还好吧,感觉不难呢。

    • 你这种case都过不了吧

      • 以后你去笔试的时候,一定要记住认真读题啊,否则轻则花不必要的时间,重则直接做错。比如这个例子,你要好好看看输入描述是啥

      • Summer   04/12

        人家说了参与运算的数字是0-9,麻烦你下次喷人之前先确保自己是正确的。妈卖批。

  • 你是吉祥么   04/07

     

  • Stan_今夕何夕 初级前端小白 04/07

    总感觉好像用eval有点不太好,但是这已经是能想出来的最优解了····

  •  

  • 木有木有 前端码农 04/07

    我的js实现来了

    var op={
    ‘+’: function(a,b){return a+b;},
    ‘-‘:function(a,b){return a-b;},
    ‘*’:function(a,b){return a*b;},
    ‘/’:function(a,b){return a/b;}
    };
    var arr=(‘3+5*7’).split(”);
    var result=Number(arr[0]);
    $.each(arr,function(i,v){
    if(op[v]){
    result=op[v](result,Number(arr[i+1]));
    }
    })

  • static public void main(String[] args) {
    express(“12+9*14-1*111”);
    }

    private static void express(String string) {
    String[] nums = string.split(“[+\\-\\*]”);
    String[] signs = string.split(“[0-9]”);
    ArrayList<String> signList = new ArrayList<String>();
    for(int i=0;i<=signs.length-1;i++){
    if(!signs[i].equals(“”))
    {
    signList.add(signs[i]);
    }
    }
    int result = Integer.parseInt(nums[0]);

    for(int i=0;i<signList.size();i++){
    if(“+”.equals(signList.get(i))){
    result += Integer.parseInt(nums[i+1]);
    }else if(“-“.equals(signList.get(i))){
    result -=Integer.parseInt(nums[i+1]);
    }else if(“*”.equals(signList.get(i))){
    result *= Integer.parseInt(nums[i+1]);
    }
    }
    System.out.println(result);
    }

     

  • sunshine engineer 04/09

    分割字符串得到字符串数组
    将索引值为0,1,2的字符串传入计算方法得到结果
    将结果赋值给字符串数组中索引为2的字符串
    将索引值为2,3,4的字符串传入计算方法得到结果
    将结果赋值给字符串数组中索引为4的字符串
    按规律重复以上步骤即可获得结果

  • 王念一 高一学生 04/09

    用一个循环读取字符,flag以记录当前字符类型(操作数/操作符),每读入一次就反转。

    由于不存在表达式嵌套以及三元及以上操作符,无需使用栈,仅使用三个变量,用以保存当前结果、当前操作符以及当前操作数即可。

    若输入遇到 ‘\n’ 则输出结果,结束。

  • 我也写了一个,不知道效率怎么样,效率怎么看啊??

  • 阏男秀   04/12

    主要考察栈的使用。

    打印:

    请输入一个数学表达式:3+5*7
    56