L2-033 简单计算器
Statement
Metadata
- 作者: 陈越
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 400 ms
- 内存限制: 64 MB
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈
- 从
中弹出两个数字,顺序为 和 ; - 从
中弹出一个运算符 op; - 执行计算
op ; - 将得到的结果压回
。
直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
输入格式
输入首先在第一行给出正整数
第二行给出 +
、-
、*
、/
这四种运算。一行中的数字和符号都以空格分隔。
输出格式
将输入的数字和运算符按给定顺序分别压入堆栈
如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0
,其中 X
是当时的分子。然后结束程序。
输入样例 1
输出样例 1
输入样例 2
输出样例 2
Solution
#include <bits/stdc++.h>
using namespace std;
using db = long double;
using ll = long long;
const int N = 1e3 + 10;
int n;
ll a[N];
string op[N];
int main() {
cin >> n;
stack<ll> numS;
stack<string> opS;
for (int i = 1; i <= n; ++i) cin >> a[i], numS.push(a[i]);
for (int i = 1; i < n; ++i) {
cin >> op[i];
opS.push(op[i]);
}
while (!opS.empty()) {
string _op = opS.top();
opS.pop();
ll a = numS.top();
numS.pop();
ll b = numS.top();
numS.pop();
if (_op == "/" && !a) {
cout << "ERROR: " << b << "/0\n";
return 0;
}
if (_op == "/") {
b /= a;
} else if (_op == "*") {
b *= a;
} else if (_op == "+") {
b += a;
} else {
b -= a;
}
numS.push(b);
}
cout << numS.top() << endl;
return 0;
}
Last update: May 4, 2022