
这道题上来没啥思路
也读不懂题
有天听巨巨说是个栈操作
然后又放了几天
突然就把题读懂了
知道是个栈就特别简单了…
注意运算顺序就行
#include <iostream>
#include <stack>
using namespace std;
typedef long long ll;
int main()
{
stack <ll> num;
string s;
cin>>s;
for(int i = 0; i < s.length(); i++)
{
if(s[i] >= '0' && s[i] <= '9')
{
int tmp = 0;
while(s[i] != '.' && s[i] != '@')
{
tmp = tmp * 10 + s[i] - '0';
i++;
}
num.push(tmp);
}
if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
{
int a = 0, b = 0;
a = num.top();
num.pop();
b = num.top();
num.pop();
if(s[i] == '+')
{
b += a;
}
else if(s[i] == '-')
{
b -= a;
}
else if(s[i] == '*')
{
b *= a;
}
else
{
b /= a;
}
num.push(b);
}
}
ll ans = 0;
ans = num.top();
cout<<ans<<endl;
return 0;
}

本文介绍了一种使用栈数据结构解析并计算后缀表达式的算法实现。通过读取字符串输入,算法能正确处理加、减、乘、除四种基本运算,并保持正确的运算顺序。文章包含完整的C++代码示例。
1405

被折叠的 条评论
为什么被折叠?



