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防止卡数据

posted @ 2025-03-02 16:50  Frodnx  阅读(13)  评论(0)    收藏  举报