P1449 后缀表达式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
练习下手写栈
代码如下:
#include <iostream>
using namespace std;
int stk[500];
int t, tt = 0; // tt表示栈顶
int main()
{
//while((op=getchar()) != '@') 也可以这样写输入
string n;
cin >> n;
for (int i = 0; i < n.size(); i++)
{
if (n[i] == '@') break;
if (n[i] >= '0' && n[i] <= '9') t *= 10, t += n[i] - '0';
else if (n[i] == '.') //将数字入栈
{
stk[++tt] = t;
t = 0;
}
else if (n[i] == '+')
{
t += stk[tt];
tt--;
t += stk[tt];
tt--;
stk[++tt] = t;
t = 0;
/*
我这样写是完全模拟了进栈和出栈 也可以这样写
stk[tt - 1] = stk[tt - 1] + stk[tt];
stk[tt] = 0;
tt--;
*/
}
else if (n[i] == '*')
{
t = stk[tt];
tt--;
t *= stk[tt];
tt--;
stk[++tt] = t;
t = 0;
}
else if (n[i] == '-')
{
t = stk[tt];
tt--;
t = stk[tt] - t;
tt--;
stk[++tt] = t;
t = 0;
}
else if (n[i] == '/')
{
t = stk[tt];
tt--;
t = stk[tt] / t;
tt--;
stk[++tt] = t;
t = 0;
}
}
cout << stk[1];
return 0;
}