1198:逆波兰表达式

简介: 1198:逆波兰表达式

1198:逆波兰表达式    <这里应该是波兰表达式(前缀表达式),而逆波兰指的是后缀表达式>

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。

【输入】

输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

【输出】

输出为一行,表达式的值。

可直接用printf("%f\n", v)输出表达式的值v。

【输入样例】

* + 11.0 12.0 + 24.0 35.0

【输出样例】

1357.000000

【来源】

No

1. //递归法
2. #include<bits/stdc++.h>
3. using namespace std;
4. char s[1001];
5. double v=0;
6. double bol()
7. {
8.  scanf("%s",s);
9.  switch(s[0]){
10.     case'+':return bol()+bol();break;
11.     case'-':return bol()-bol();break;
12.     case'*':return bol()*bol();break;
13.     case'/':return bol()/bol();break;
14.     default:v=atof(s);//atof(s)将字符串s转换为double的浮点数 
15.   }
16.   return v;
17. }
18. int main()
19. {
20.   printf("%.6lf",bol());
21.   return 0;
22.  }
1. //手工解析模拟 逆推 栈
2. #include<bits/stdc++.h>
3. using namespace std;
4. char s[1001];
5. double v=0;
6. void get_value(stack<double> &s,double &a ,double &b)
7. {
8.  a=s.top();
9.  s.pop();
10.   b=s.top();
11.   s.pop();
12. }
13. int main()
14. {
15.   int k=0;
16.   string exp[100];
17.   stack<double> st;
18.   double a,b;
19.   cin.getline(s,1000,'\n'); 
20.   for(int i=strlen(s)-1;i>=0;i--) {
21.     if(s[i]==' ')   k++;
22.     else  exp[k].insert(exp[k].begin(),s[i]); 
23.   }
24.   for(int i=0;i<=k;i++){
25.     if(exp[i]=="+"){
26.       get_value(st,a,b);
27.       st.push(a+b);
28.     }
29.     else if (exp[i]=="-"){
30.       get_value(st,a,b);
31.       st.push(a-b);
32. 
33.     }
34.     else if (exp[i]=="*"){
35.       get_value(st,a,b);
36.       st.push(a*b);
37.     }
38.     else if (exp[i]=="/"){
39.       get_value(st,a,b);
40.       st.push(a/b);
41.     }
42.     else
43.       st.push(atof(exp[i].c_str()));
44.   }
45.   printf("%f",st.top());
46.   return 0;
47.  }

 

相关文章
【逆波兰表达式求值】
【逆波兰表达式求值】
10_逆波兰表达式求值
10_逆波兰表达式求值
|
2月前
【LeetCode 25】150.逆波兰表达式求值
【LeetCode 25】150.逆波兰表达式求值
13 0
|
2月前
|
存储 C语言
中缀表达式转后缀表达式
本文提供了一个C语言程序,用于将中缀表达式转换为后缀表达式,并计算后缀表达式的结果,包括处理运算符优先级、括号匹配以及基本的四则运算。
49 0
|
7月前
|
索引
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
58 0
|
7月前
彻底大悟!逆波兰表达式求值(150)
彻底大悟!逆波兰表达式求值(150)
中缀表达式转后缀表达式(逆波兰式)
中缀表达式转后缀表达式(逆波兰式)
183 0
|
7月前
逆波兰表达式求值
逆波兰表达式求值
73 1
|
7月前
|
Java C++ Python
leetcode-150:逆波兰表达式求值
leetcode-150:逆波兰表达式求值
41 0
|
算法
中缀表达式转后缀表达式(1、2、3) 2021-03-26
中缀表达式转后缀表达式(1、2、3) 2021-03-26
151 0
中缀表达式转后缀表达式(1、2、3) 2021-03-26