ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

洛谷 P1449:后缀表达式 ← 数组模拟栈

洛谷 P1449:后缀表达式 ← 数组模拟栈 【题目来源】https://www.luogu.com.cn/problem/P1449【题目描述】所谓后缀表达式是指这样的一个表达式式中不再引用括号运算符号放在两个运算对象之后所有计算按运算符号出现的顺序严格地由左而右进行不用考虑运算符的优先级。本题中运算符仅包含 -*/。保证对于 / 运算除数不为 0。特别地其中 / 运算的结果需要向 0 取整即与 C/运算的规则一致。如3*(5-2)7 对应的后缀表达式为3.5.2.-*7.。在该式中为表达式的结束符号。.为操作数的结束符号。【输入格式】输入一行一个字符串 s表示后缀表达式。【输出格式】输出一个整数表示表达式的值。【输入样例1】3.5.2.-*7.【输出样例1】16【输入样例2】10.28.30./*7.-【输出样例2】-7【说明/提示】数据保证1≤∣s∣≤50答案和计算过程中的每一个值的绝对值不超过10^9。【算法分析】● 数组模拟栈https://blog.csdn.net/hnjzsyjyj/article/details/130522133● 如下代码利用数组模拟栈实现逆序输出。#include bits/stdc.h using namespace std; const int maxn105; char s[maxn]; int main() { char x; int top0; int n; cinn; while(n--) { cinx; s[top]x; } while(top!0) { couts[top]; top--; } return 0; } /* in: 5 abcde out: edcba */【算法代码】#include bits/stdc.h using namespace std; const int maxn55; int stk[maxn],top; string s; int x; int main() { cins; for(char c:s) { if(c0 c9) { xx*10(c-0); } else if(c.) { stk[top]x; x0; } else if(c) { break; } else { int ristk[--top]; int lestk[--top]; int res0; if(c) resleri; if(c-) resle-ri; if(c*) resle*ri; if(c/) resle/ri; stk[top]res; } } coutstk[top-1]endl; return 0; } /* in:3.5.2.-*7. out:16 */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/130522133https://www.luogu.com.cn/problem/solution/P1449https://blog.csdn.net/hnjzsyjyj/article/details/145522672
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进