实现一个加减乘除的计算器
实现加减乘除计算器
实现一个加减乘除的计算器,输入是一串表达式(都是非负整数),要求输出四舍五入后的整数。
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');