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