额。
这个是按照慕课网上的老师讲的思路做出来的。
感觉递归真的好多用处。
拓展了可以求浮点数的多项式。
不过括号一定要用英文的 ,想了好久都不知道怎么把中文括号和英文括号统一起来判断, 主要是因为中文括号占多个字节 。
唉??........
1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 using namespace std; 5 double biaodas(); 6 double xiang(); 7 double yinz()//求一个因子的值 8 { 9 double res = 0; 10 char tem = cin.peek();//只看不拿走 11 if (tem == ‘(‘)//因子可能是一个括号包起来的表达式,递归到求表达式 12 { 13 cin.get(); 14 res = biaodas(); 15 cin.get(); 16 } 17 else//计算出多个十进制数字符连续组成的数的大小 18 { 19 while (isdigit(tem))//判断tem是不是十进制的字符 20 { 21 res = res * 10 + tem - ‘0‘; 22 cin.get(); 23 tem = cin.peek(); 24 } 25 if (tem == ‘.‘)//判断有没有小数 26 { 27 double k = 10; 28 cin.get(); 29 tem=cin.peek(); 30 while (isdigit(tem)) 31 { 32 res += (tem-‘0‘) / k; 33 k *= 10; 34 cin.get(); 35 tem = cin.peek(); 36 } 37 } 38 } 39 return res; 40 } 41 double xiang()//求一个多项式的值 42 { 43 double res = yinz(); 44 int flag = 1; 45 while (flag) 46 { 47 char tem = cin.peek(); 48 if (tem == ‘*‘ || tem == ‘/‘)//判断乘除把多项式的求解分解为求多个因子的值 49 { 50 cin.get(); 51 double va = yinz(); 52 if (tem == ‘*‘) 53 res *= va; 54 else 55 res /= va; 56 } 57 else flag = 0; 58 } 59 return res; 60 } 61 double biaodas()//求表达式的值 62 { 63 double res = xiang(); 64 int flag = 1; 65 while (flag) 66 { 67 char tem = cin.peek(); 68 if (tem == ‘+‘ || tem == ‘-‘)//判断乘除把表达式的求解分解为求多多项式的值 69 { 70 cin.get(); 71 double va = xiang(); 72 if (tem == ‘+‘) 73 res += va; 74 else 75 res -= va; 76 } 77 else flag = 0; 78 } 79 return res; 80 } 81 int main1() 82 { 83 cout << biaodas() << endl; 84 system("pause"); 85 return 0; 86 }