首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中使用堆栈的前缀计算器

在javascript中使用堆栈的前缀计算器
EN

Stack Overflow用户
提问于 2020-09-05 01:21:42
回答 1查看 822关注 0票数 2

我正在尝试使用javascript中的堆栈来制作具有RPN (反向抛光符号)输入法的计算器。

input : [1, 5, '+', 6, 3, '-', '/', 7, '*']

%1是操作数,推送到堆栈。

5是一个操作数,推送到堆栈。

'+‘是一个运算符,弹出1和5,计算它们并将结果推送到Stack。

6是一个操作数,推送到堆栈。

3是一个操作数,推送到堆栈。

'-‘是一个运算符,弹出6和3,减去它们,并将结果推送到Stack。

'/‘是一个运算符,pop 6和3,将它们相除并将结果推送到Stack。

7是一个操作数,推送到堆栈。

'*‘是一个运算符,pop 2和7,将它们相乘并将结果推送到Stack。

output : [14]

有没有其他方法可以让我的代码更有效呢?

代码语言:javascript
复制
const x1 = x.push(1);
const x2 = x.push(5);
const x3 = x.push('+');

x.pop(1);
x.pop(5);
x.pop('+');
x.push(1+5);

const x4 = x.push(6);
const x5 = x.push(3);
const x6 = x.push('-');

x.pop(6);
x.pop(3);
x.pop('-');
x.push(6-3);

const x7 = x.push('/');
x.pop(6);
x.pop(3);
x.pop('/');
x.push(6/3);

const x8 = x.push(7);
const x9 = x.push('*');

x.pop(2);
x.pop(7);
x.pop('*');
x.push(2*7);

console.log(x);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 02:12:19

您可以为所有运算符获取一个对象,并检查input的值是否为运算符,然后使用堆栈的反转弹出的值执行操作,或者将值推入堆栈。

代码语言:javascript
复制
const
    operators = {
        '+': (a, b) => a + b,
        '-': (a, b) => a - b,
        '*': (a, b) => a * b,
        '/': (a, b) => a / b
    },
    input = [1, 5, '+', 6, 3, '-', '/', 7, '*'],
    stack = [];

input.forEach(value => {
    stack.push(value in operators
        ? operators[value](...stack.splice(-2))
        : value
    );
    console.log(...stack);
});
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63745538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档