luogu P1449 后缀表达式 x
题目描述
所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。
如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。
输入输出格式
输入格式:
输入:后缀表达式
输出格式:
输出:表达式的值
输入输出样例
输入样例#1:
3.5.2.-*7.+@
输出样例#1:
16
说明
字符串长度,1000内。
思路:
如题目所述,’@’为表达式的结束符号,‘.’为操作数的结束符号.
所以最后一定是用'@'做结尾的,然后又因为读入的时候是从0开始读入,而i又是从0开始进行,所以i最终循环到strlen(s)-2即可[s-1的话是字符串最后'@'的下标,我们不考虑他,所以-2]
然后其他的就用后缀表达式的方法去做就好.
代码酱来也~
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cstdlib> using namespace std; char c[2560]; int stt[1111]; int st(char c[2560]) { int i=0,top=0,x; while(i<=strlen(c)-2) { switch(c[i]) { case '+': ///先弹出顶端的数,将顶端下方的数,更改为弹出的数与其之和 /* top--; stt[top]=stt[top+1]+stt[top]; ///stt[top+1]是刚刚弹出来的最顶端的数 ///以下的各种均能够这样写,只是更改一下符号而已 */ stt[--top]+=stt[top+1]; break; case '-': stt[--top]-=stt[top+1]; break; case '*': stt[--top]*=stt[top+1]; break; case '/': stt[--top]/=stt[top+1]; break; default: x=0; while(c[i]!='.') ///从题目中得知,'.'是操作数的结束标志, ///所以如果不是'.'以及各种符号就是操作的数字 x=x*10+c[i]-'0',i++;///有可能是多位数 stt[++top]=x;///入栈 break; } i++;///继续操作下一字符 } return stt[top];///最后返回最终结果 } int main() { gets(c); printf("%d",st(c)); return 0; }
End.