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;这个东西能读到空格
所以读的时候要不就是运算符,要不就是数字
读到运算符的话,
那就是后面两个波兰表达式.
然后分别对某一个表达式进行上述操作.
其实就是套定义,
大波兰表达式套小波兰表达式