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

实现加减乘除计算器

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

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.log("参数:" + param, "结果:" + JSON.stringify(algorithm(param)))
  testPerformance(algorithm, param)
}
main('3+2*2*2');


请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部