Skip to content

Commit a2dc794

Browse files
committed
20190325
1 parent b96c82c commit a2dc794

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include <iostream>
2+
#include <cctype>
3+
#include <cstring>
4+
#include <stack>
5+
using namespace std;
6+
char calcu[10000];
7+
stack<char> ope;
8+
stack<int> num;
9+
10+
int calculate(int a, int b, char c){
11+
switch (c) {
12+
case '+': return a + b; break;
13+
case '-': return a - b; break;
14+
case '*': return a * b; break;
15+
case '/': return a / b; break;
16+
default: return -1;
17+
}
18+
}
19+
int main(){
20+
scanf("%s", calcu);
21+
int len = (int)strlen(calcu);
22+
23+
for(int i = 0; i<len; i++){
24+
if(isdigit(calcu[i])){
25+
int temp = 0;
26+
while(i < len && isdigit(calcu[i])){
27+
temp = temp * 10 + calcu[i] - '0';
28+
i++;
29+
}
30+
num.push(temp);
31+
i--;
32+
}
33+
else{
34+
if(calcu[i] == ')'){
35+
while(ope.top() != '(' && !ope.empty()){
36+
int temp1 = num.top(); num.pop();
37+
int temp2 = num.top(); num.pop();
38+
num.push(calculate(temp2, temp1, ope.top()));
39+
ope.pop();
40+
}
41+
if(!ope.empty()) ope.pop();
42+
}
43+
else if(calcu[i] == '(') ope.push(calcu[i]);
44+
else if(calcu[i] == '+' || calcu[i] == '-'){
45+
while(!ope.empty() && ope.top() != '('){
46+
int temp1 = num.top(); num.pop();
47+
int temp2 = num.top(); num.pop();
48+
num.push(calculate(temp2, temp1, ope.top()));
49+
ope.pop();
50+
}
51+
ope.push(calcu[i]);
52+
}
53+
else{
54+
while(!ope.empty() && ope.top() != '+' && ope.top() != '-' && ope.top() != '('){
55+
int temp1 = num.top(); num.pop();
56+
int temp2 = num.top(); num.pop();
57+
num.push(calculate(temp2, temp1, ope.top()));
58+
ope.pop();
59+
}
60+
ope.push(calcu[i]);
61+
}
62+
}
63+
}
64+
while(!ope.empty()){
65+
int temp1 = num.top(); num.pop();
66+
int temp2 = num.top(); num.pop();
67+
num.push(calculate(temp2, temp1, ope.top()));
68+
ope.pop();
69+
}
70+
71+
cout<<num.top();
72+
system("pause");
73+
return 0;
74+
}

0 commit comments

Comments
 (0)