原题其实可以归纳为一个计算不带括号的小学算术题
计算机计算数学表达式需要转化成后缀表达式——逆波兰式
#include
#include
using namespace std;
stackt;
int sol(string s) //计算后缀表达式的值
{
stackd;
for(int i=0;i
{
if(s[i]<='9'&&s[i]>='0')
d.push(s[i]-48);
else
{
int x,y;
x=d.top(),d.pop();
y=d.top(),d.pop();
if(s[i]=='+')
y+=x;
else if(s[i]=='-')
y-=x;
else if(s[i]=='x')
y*=x;
else
y/=x;
d.push(y);
}
}
return d.top();
}
int main()
{
string s,ss;
cin>>s;
for(int i=0;i
{
if(s[i]<='9'&&s[i]>='0')
ss+=s[i];
else if(s[i]=='+'||s[i]=='-')
{
while(!t.empty())
{
ss+=t.top();
t.pop();
}
t.push(s[i]);
}
else
{
t.push(s[i]);
}
}
while(!t.empty())
{
ss+=t.top();
t.pop();
}
cout<
return 0;
}
该博客介绍了一种计算不带括号的小学算术题的方法,通过将数学表达式转化为后缀表达式(逆波兰式)进行计算。程序使用栈数据结构,遍历输入的字符串,遇到数字则压栈,遇到运算符则从栈中弹出两个数进行相应运算,并将结果压回栈。最后栈顶元素即为表达式的结果。
900

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



