实现加减乘除计算器
实现一个加减乘除的计算器,输入是一串表达式(都是非负整数),要求输出四舍五入后的整数。
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');
请你自动动手试一下:在线编程环境