• 【TFLSnoi李志帅】---栈


    恭喜fyx同学开通博客!博客地址:https://www.cnblogs.com/qwn34/     墙裂推荐嗷~

     

     

     

     

     

     

     

     

    1331:【例1-2】后缀表达式的值


    时间限制: 10 ms         内存限制: 65536 KB
    提交数: 18701     通过数: 3301

    【题目描述】

    从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

    比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:

    栈中的变化情况:

    运行结果:-47

    提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264264范围内,如有除法保证能整除。

    【输入】

    一个后缀表达式。

    【输出】

    一个后缀表达式的值。

    【输入样例】

    16 9 4 3 +*-@

    【输出样例】

    -47

    ———————————————————————————————————————————————————————————————————

    直接上⑩分代码(老狮说数据应该是有问题滴,我也死活写不出来哪里有毛病

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 long long sta[300];//栈的定义和函数,日常操作
     4 int t=0;
     5 bool empty()
     6 {
     7     if(t==0)return 1;
     8     return 0;
     9 }
    10 void push(int x)
    11 {
    12     sta[++t]=x;
    13 }
    14 void pop()
    15 {
    16     t--;
    17 }
    18 int top()
    19 {
    20     return sta[t];
    21 }
    22 int size()
    23 {
    24     return t;
    25 }
    26 int main()
    27 {
    28     long long ans=0,x=0,k=0;
    29     char sum[300];
    30     gets(sum);
    31     x=strlen(sum);//获取sum长度
    32     for(int i=0;i<x;i++)//要注意,这里用了gets输入sum,是从sum【0】开始输入,而非sum【1】;
    33     {
    34         if(sum[i]>='0' && sum[i]<='9')k=k*10+sum[i]-'0';//char转int要-‘0’
    35         if(sum[i]==' ')
    36         {
    37             push(k);
    38             k=0;
    39         }
    40         if(sum[i]=='+')
    41         {
    42             ans=top();//把两数拿出进行相应运算
    43             pop();
    44             ans+=top();
    45             pop();
    46             push(ans);
    47             ans=0;//多余,省掉
    48         }
    49         if(sum[i]=='-')
    50         {
    51             ans=top();
    52             pop();
    53             ans=top()-ans;
    54             pop();
    55             push(ans);
    56             ans=0;
    57         }
    58         if(sum[i]=='*')
    59         {
    60             ans=top();
    61             pop();
    62             ans*=top();
    63             pop();
    64             push(ans);
    65             ans=0;
    66         }
    67         if(sum[i]=='/')
    68         {
    69             ans=top();
    70             pop();
    71             ans=top()/ans;
    72             pop();
    73             push(ans);
    74             ans=0;
    75         }
    76     }
    77     cout<<top();//输出结果
    78     return 0;
    79 }

    恭喜fyx同学开通博客!博客地址:https://www.cnblogs.com/qwn34/     墙裂推荐嗷~

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    将博客搬至CSDN
    ActiveMQ 的可持久化(六)
    ActiveMQ之协议(五)
    ActiveMQ与Spring / SpringBoot 整合(四)
    ActiveMQ之JMS及保证消息的可靠性<持久化、事务、签收>(三)
    ActiveMQ部署和代码尝试(二)
    ActiveMQ初步安装使用(一)
    Redis之哨兵机制(五)
    Redis主从复制(读写分离)(四)
    Redis持久化(三)
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/13538138.html
Copyright © 2020-2023  润新知