递归-波兰表达式

 1 /*可以用回溯,但是我已经不太熟悉回溯了!!!!!!!!呜呜呜
 2  *
 3  */
 4 #include <iostream>
 5 #include <math.h>
 6 using namespace std;
 7 /*
 8  * 这个地方我确实没有想到
 9  * 我不知道怎么判断两个符号的作用对象
10  *
11  *
12  *
13  *
14  *
15  * 下面的题解很奇妙
16  * 所有的case都没有break
17  * 如果有很多符号的话可以挨个读完,这也是switch的好处
18  * 注意返回值
19  */
20 double exp() {
21     char a[100];
22     cin >> a;
23     switch (a[0]) {
24         case '+':
25             return exp() + exp();
26         case '-':
27             return exp() - exp();
28         case '*':
29             return exp() * exp();
30         case '/':
31             return exp() / exp();
32         default:
33             return atof(a);//字符转double
34 
35             break;
36 
37     }
38 }
39 int main() {
40     cout << exp();
41 }

 大体思路:

cin>>a;这个东西能读到空格

所以读的时候要不就是运算符,要不就是数字

读到运算符的话,

那就是后面两个波兰表达式.

然后分别对某一个表达式进行上述操作.

 

其实就是套定义,

大波兰表达式套小波兰表达式

 

posted @ 2020-07-03 22:27  安之若醇  阅读(261)  评论(0编辑  收藏  举报
Live2D服务支持