L2-033 简单计算器 分数 25
#include <iostream>
using namespace std;
bool Mul_ = false;
#define i64 long long
const int N = 1e3 + 10;
i64 cnt = 0;
i64 numstk[N];
char opstk[N];
int cnt1 = 0, cnt2 = 0;
void insert1(i64 num)
{
numstk[++ cnt1] = num;
}
void insert2(char c)
{
opstk[++ cnt2] = c;
}
i64 popback1()
{
return numstk[cnt1 --];
}
char popback2()
{
return opstk[cnt2 --];
}
void solve()
{
i64 n;
scanf("%lld", &n);
for(int i = 1; i <= n; ++ i)
{
i64 tmpn;
scanf("%lld", &tmpn);
insert1(tmpn);
}
for(int i = 1; i < n; ++ i)
{
char tmpc;
cin >> tmpc;
insert2(tmpc);
}
while(cnt2)
{
i64 _n1 = popback1();
i64 _n2 = popback1();
char _op = popback2();
if(_op == '+') insert1(_n2 + _n1);
else if(_op == '-') insert1(_n2 - _n1);
else if(_op == '*') insert1(_n2 * _n1);
else if(_op == '/')
{
if(_n1 == 0)
{
printf("ERROR: %lld/0", _n2);
return;
}
insert1(_n2 / _n1);
}
}
cout << popback1();
}
int main()
{
int _T = 1;
if(Mul_) cin >> _T;
while(_T --){
solve();
}
return 0;
}
手写堆栈,开longlong防止卡数据
浙公网安备 33010602011771号