【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/     墙裂推荐嗷~

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-08-20 22:03  九州霜  阅读(215)  评论(0编辑  收藏  举报