博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题目29:计算表达式
阅读量:6821 次
发布时间:2019-06-26

本文共 1478 字,大约阅读时间需要 4 分钟。

题目描述: 对于一个不存在括号的表达式进行计算
输入: 存在多种数据,每组数据一行,表达式不存在空格
输出: 输出结果
样例输入: 6/2+3+3*4
样例输出: 18
1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 int pri[5][5] = { { 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0 }, { 1, 8 1, 1, 0, 0 }, { 1, 1, 1, 0, 0 } };//定义操作符优先级 9 stack
s;10 stack
op;11 12 int find(char c) {13 switch (c) {14 case '#':15 return 0;16 case '+':17 return 1;18 case '-':19 return 2;20 case '*':21 return 3;22 case '/':23 return 4;24 }25 }26 27 int main() {28 char st[101], *p;29 double r, x, y, tmp;30 int c, a;31 while (~scanf("%s",st)) { //换成gets(st)将bug,具体原因不是很清楚,我猜测可能是与我用*p有关,现在还是新手解释不了32 int len = strlen(st); 33 st[len++] = '#';34 st[len] = 0;35 op.push(0);36 p = st;37 while (*p) {38 a = *p++ - '0';39 while (isdigit(*p))40 a = 10 * a + *p++ - '0';//获取操作数41 s.push((double)a);42 while (!pri[find(*p)][op.top()] && op.size() >= 2) {43 x = s.top();44 s.pop();45 y = s.top();46 s.pop();47 c = op.top();48 op.pop();49 if (c == 1)50 tmp = x + y;51 else if (c == 2)52 tmp = y - x;53 else if (c == 3)54 tmp = x * y;55 else if (c == 4)56 tmp = y / x;57 s.push(tmp);58 }59 op.push(find(*p++));60 if (op.size() == 2 && !op.top()) {61 printf("%.lf\n", s.top());62 s.pop();op.pop();op.pop();63 break;64 }65 }66 }67 return 0;68 }

 

转载于:https://www.cnblogs.com/babyron/archive/2013/03/03/2941537.html

你可能感兴趣的文章