实现一个加减乘除的计算器

实现加减乘除计算器

实现一个加减乘除的计算器,输入是一串表达式(都是非负整数),要求输出四舍五入后的整数。

PS:不能使用“eval”函数来处理

示例

"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5

 

Just Try

请你自动动手试一下:在线编程环境

想想有没有其他思路?

想想时间和空间复杂度,能否优化一下

真的做不到么?

let you think, think makes you happy!

 

参考答案

循环2次

想想哈,第一种方法是循环两边,第一层循环先计算一下乘除,第二遍循环计算一下加减

记得之前写过一个计算后缀表达式(逆波兰表达式),这个同样是结合堆栈来处理运算。

function computeTM(stack, arr){
  for(let k=0; k<arr.length; k++){
    if(arr[k]=="*"){
      let m = stack.pop()
      stack.push(m*arr[k+1])
      k++;
    }
    else if(arr[k]=="/"){
      let m = stack.pop()
      stack.push(m/arr[k+1])
      k++;
    }
    else{
      stack.push(arr[k])
    }
  }
  return stack;
}
function computeAM(stack, arr){
  for(let k=0; k<arr.length; k++){
    if(arr[k]=="+"){
      let m = stack.pop()
      stack.push(+m+arr[k+1])
      k++;
    }
    else if(arr[k]=="-"){
      let m = stack.pop()
      stack.push(m-arr[k+1])
      k++;
    }
    else{
      stack.push(arr[k])
    }
  }
  return stack;
}
function algorithm(str){
  let arr = str.split("");
  let stack = []
  stack = computeTM([], arr)
  stack = computeAM([], stack)
  return stack[0];
}
function main(param) {
  console.show("参数:" + param, "结果:" + JSON.stringify(algorithm(param)))
  testPerformance(algorithm, param)
}
main('3+2*2*2');

请你自动动手试一下:在线编程环境

 

知识共享署名4.0国际许可协议,转载请保留出处; 部分内容来自网络,若有侵权请联系我:前端学堂 » 实现一个加减乘除的计算器

赞 (2) 打赏

评论 0

如果对您有帮助,别忘了打赏一下宝宝哦!

支付宝扫一扫打赏

微信扫一扫打赏