题意
给你n个数,和4个运算符,要求利用堆栈进行遍历实现操作,最后输出结果
思路
1.首先需要两个栈进行存储
2.根据题意和栈的特性,根据不同的符号进行模拟
3.输出结果
坑点
无
代码
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n,x;
stack<int>s1;//存数
stack<char>s2;//存符号
cin>>n;//n个数
for(int i=0;i<n;i++)
{
cin>>x;//遍历读入这些数
s1.push(x);//插入队列s1中
}
for(int i=0;i<n-1;i++)
{
char y;
cin>>y;//遍历读入符号
s2.push(y);//将符号插入s2中
}
while(s1.size()>1)//如果s1的大小>=2时才能进行操作
{
int a=s1.top();//栈顶赋值给a
s1.pop();//弹出
int b=s1.top();//同上
s1.pop();//弹出
char op=s2.top();//操作赋给op
s2.pop();//用完弹出
if(op=='+') s1.push(a+b);//加号则相加
else if(op=='-')//减号则后一个减去前一个
{
s1.push(b-a);//注意还要存入s1中
}
else if(op=='*')//乘号时
{
s1.push(a*b);//相乘的结果存入
}
else//除号需特判
{
if(a==0)//分母为零
{
printf("ERROR: %d/%d",b,a);//输出
return 0;
}
s1.push(b/a);//分母不为0 ,存入后一个除以前一个的结果
}
}
cout<<s1.top();//最后输出结果
return 0;
}
总结
难度中等,模拟题