19009 后缀表达式(C++)

后缀表达式(C++)

后缀表达式,又称逆波兰式。现在从键盘读入一个后缀表达式,只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。
每个运算数之间用一个空格隔开,题目所使用的运算数均小于10,并确保所给的表达式合法。以@作为结束标志。

输入格式

一个后缀表达式。

输出格式

表达式结果。

输入样例

6 9 4 3 +*-@

输出样例

-57
#include<iostream>
#include<stack>
using namespace std;
int main()
{
    stack<int>S;//定义一个栈
    int a,b,c,ch;
    while((ch=getchar())!='@')//输入数据
    {
        if(ch<='9'&&ch>='0')//挑出数字
        S.push(ch-48);//字符型变整型并入栈
        else if(ch!=' ')
        {
            a=S.top();//存起来方便计算
            S.pop();
            b=S.top();
            S.pop();
            switch(ch)//符号的判断
            {
                case '+':c=a+b;break;
                case '-':c=b-a;break;//注意进出栈的顺序(a和b)
                case '*':c=a*b;break;
                case '/':c=b/a;break;//注意进出栈的顺序(a和b)
                default :break;
            }
            S.push(c);//存入栈中
        }
    }
    cout<<S.top();//做完计算后输出
}

运行结果如下:
在这里插入图片描述

有朋友私信我:如果输入两位数(甚至多位数)的呢?

其实,原理还是一样的,只要在某些地方做更改即可
思路:用一个char型的vector数组来存字符,遇到空格就处理vector里的字符并进栈,并清空数组(为下一个多位数准备)

代码如下

#include<iostream>
#include<stack>
#include<vector>
using namespace std;
int main()
{
    stack<int>S;//定义一个栈
    vector<char>some;//定义一个用于存放字符的数组
    int a,b,c,ch;
    while((ch=getchar())!='@')//输入数据
    {
        if(ch<='9'&&ch>='0')//挑出数字
        {
            some.push_back(ch);
        }
        else if(ch==' ')//遇到空格
        {
            int all=0;
            for(int i=0;i<some.size();i++)
            {
                all=all*10+(some[i]-48);//字符变整形
            }
            S.push(all);//整型入栈
            some.clear();//!!!!!!!!记得清空数组
        }
        else//其它符号
        {
            a=S.top();//存起来方便计算
            S.pop();
            b=S.top();
            S.pop();
            switch(ch)//符号的判断
            {
                case '+':c=a+b;break;
                case '-':c=b-a;break;//注意进出栈的顺序(a和b)
                case '*':c=a*b;break;
                case '/':c=b/a;break;//注意进出栈的顺序(a和b)
                default :break;
            }
            S.push(c);//存入栈中
        }
    }
    cout<<S.top();//做完计算后输出
}

若有可以改进的地方,请及时指出!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
后缀表达式是一种运算符排列方式,其中运算符位于运算数之后,而不是之间或之前。对于后缀表达式"19009",我们可以将其转换为中缀表达式如下:1-9*0*0。根据后缀表达式的规则,我们从左到右依次进行运算。 首先,我们遇到数字1,将其存储为运算数。 接下来,我们遇到数字9,同样将其存储为运算数。 然后,我们遇到乘号*,表示要进行乘法运算。此时,我们需要从中弹出两个运算数,计算乘法的结果,并将结果重新压入中。 再然后,我们遇到数字0,存储为运算数。 最后,我们遇到第二个乘号*,同样需要进行乘法运算。我们再次从中弹出两个运算数,计算乘法的结果,并将结果重新压入中。 最终,中的唯一元素就是后缀表达式的结果,即0。 因此,后缀表达式"19009"的结果为0。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [19009 后缀表达式(C++)](https://blog.csdn.net/qq_51297987/article/details/117389588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [scau 19009 后缀表达式](https://blog.csdn.net/zqihm/article/details/123758234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值