
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上所示,计算器由两个堆栈组成,一个堆栈S1存放数字,另一个堆栈S2存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:
从S1中弹出两个数字,顺序为n1和n2;从S2中弹出一个运算符op;执行计算n2opn1;将得到的结果压回S1。
直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
输入格式:
输入首先在第一行给出正整数N,为S1中数字的个数。
第二行给出N个绝对值不超过100的整数;第三行给出N−1个运算符——这里仅考虑+、-、*、/这四种运算。一行中的数字和符号都以空格分隔。
输出格式:
将输入的数字和运算符按给定顺序分别压入堆栈S1和S2,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过10
如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR:X/0,其中X是当时的分子。然后结束程序。
输入样例
5
40 5 8 3 2
/ * - +
输出样例
输入样例
5
2 5 8 4 4
* / - +
输出样例
ERROR: 5/0
25分的题有些过了,就是栈的压入弹出基础操作
代码:
#include<bits/stdc++.h>
using namespace std;
stack<int>s1;
stack<char>s2;
bool st = true;
int x,a, b;
char op;
int main()
{
int n;
cin >> n;
int m = n - 1;
while(n--)
{
cin >> x;
s1.push(x);
}
while(m--)
{
cin >> op;
s2.push(op);
}
while (!s2.empty())
{
a = s1.top();
s1.pop();
b = s1.top();
s1.pop();
op = s2.top();
s2.pop();
if (op == "+")
x = a + b;
else if (op == "-")
x = b - a;
else if (op == "/")
{
if (a == 0)
{
printf("ERROR: %d/0
", b);
st = false;
break;
}
x = b / a;
}
else if (op == "*")
x = a * b;
s1.push(x);
}
if(st)
printf("%d
",s1.top());
}
文章为作者独立观点,不代表股票量化交易软件接口观点