- 题目描述:对于一个不存在括号的表达式进行计算
- 输入:存在多种数据,每组数据一行,表达式不存在空格
- 输出:输出结果
- 样例输入:6/2+3+3*4
- 样例输出:18
1 #include <stdio.h> 2 #include <stack> 3 #include <string.h> 4 #include <cctype> 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<double> s; 10 stack<int> 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 }