前缀表达式求值
来源:互联网 发布:mysql忘记密码 编辑:程序博客网 时间:2024/05/29 03:07
序号输入输出1
+ + 2 * 3 - 7 4 / 8 4
13.02
/ -25 + * - 2 3 4 / 8 4
12.53
/ 5 + * - 2 3 4 / 8 2
ERROR4
+10.23
10.2
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。
输入格式说明:
输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、\以及运算数,不同对象(运算数、运算符号)之间以空格分隔。
输出格式说明:
输出前缀表达式的运算结果,精确到小数点后1位,或错误信息“ERROR”。
样例输入与输出:
前缀,中缀,后缀表达式相关问题请见点击打开链接
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <stack>using namespace std;int main() {char s[50];stack <double> st;gets(s);double num;int i, cnt;for(i = strlen(s) - 1; i >= 0; i--) {if(s[i] >= '0' && s[i] <= '9') {num = s[i] - '0';cnt = 10;for(i--; i >= 0; i--) {//printf("%f\n", num);if((s[i] >= '0' && s[i] <= '9') || (s[i] == '.')) {if(s[i] >= '0' && s[i] <= '9') {num += (s[i] - '0') * cnt;cnt = cnt * 10;}else {num = num / cnt;cnt = 1;}}else if(s[i] == '-') {num = -num;}else {break;}}st.push(num);}else if(s[i] == ' ') {continue;}else {double a, b, sum;a = st.top();st.pop();b = st.top();st.pop();if(s[i] == '+') {sum = a + b;}else if(s[i] == '-') {sum = a - b;}else if(s[i] == '*') {sum = a * b;}else {if(b == 0) {printf("ERROR");exit(0);}sum = a / b;}st.push(sum);}}double re = st.top();printf("%.1f", re);return 0;}
0 0
- 前缀表达式求值
- 前缀表达式的求值
- 前缀表达式求值
- 前缀表达式求值
- 前缀表达式求值--栈
- 前缀式表达式求值
- 中缀表达式求值、后缀表达式求值、中缀转后缀、前缀
- 前缀表达式求值(Prefix expressions)
- 前缀表达式求值的递归程序
- 表达式求值(前缀、中缀、后缀)
- 中缀、前缀和后缀表达式求值问题
- 前缀 中缀 后缀 表达式求值问题
- NYOJ128--前缀表达式求值--递归版
- 算术表达式转成前缀表达式(波兰表达式)并求值
- 前缀表达式求值 后缀表达式求值 中缀表达式转后缀表达式
- 前缀,中缀,后缀表达式的转换,表达式的求值
- VS2015,C++实现前缀、中缀、后缀表达式求值、前缀转中缀、前缀转后缀。
- nyoj128 前缀式求值
- 系统调用与库函数调用的区别
- 2014 ACM/ICPC Asia Regional Beijing Online(hdu5036 概率+bitset优化)
- Problem G. Pulp Fiction-Gym 100345G-贪心
- 形参和实参 (F#)
- 67Add Binary
- 前缀表达式求值
- 白话经典算法-快速排序
- SecureCRT登录Linux出现中文乱码问题
- LeetCode257——Binary Tree Paths
- 数据结构--赫夫曼树(最优二叉村)
- 如何将自定义RPM包加入YUM
- 基于Android2.3的车载导航---andorid GPS HAL的移植与分析(by liukun321咕唧咕唧)
- 动态计算UILabel的高度,宽度,自动换行
- 黑马程序员=======总结集合笔记