pipioj 1291接尾辞式転接尾辞式I
9463 ワード
1 #define bug(x) cout< 2 #include
3 using namespace std;
4 const int N=1000;
5 stack<char>s;
6 int n;
7 char t[N];
8 void solve(){
9 for(int i=1;i<=n;i++){
10 if(t[i]>='a'&&t[i]<='z')printf("%c",t[i]);
11 else if(t[i]=='('){
12 s.push(t[i]);
13 }
14 else if(t[i]=='^'){
15 while(!s.empty()&&s.top()=='^'){
16 printf("%c",s.top());
17 s.pop();
18 }
19 s.push(t[i]);
20 }
21 else if(t[i]=='*'||t[i]=='/'){
22 while(!s.empty()&&(s.top()=='^'||s.top()=='*'||s.top()=='/')){
23 printf("%c",s.top());
24 s.pop();
25 }
26 s.push(t[i]);
27 }
28 else if(t[i]=='+'||t[i]=='-'){
29 while(!s.empty()&&s.top()!='('){
30 printf("%c",s.top());
31 s.pop();
32 }
33 s.push(t[i]);
34 }
35 else{
36 while(!s.empty()&&s.top()!='('){
37 printf("%c",s.top());
38 s.pop();
39 }
40 s.pop();
41 }
42 }
43 while(!s.empty()){
44 printf("%c",s.top());
45 s.pop();
46 }
47 }
48 int main(){
49 scanf("%s",t+1);
50 n=strlen(t+1);
51 solve();
52 printf("
");
53 }
54 /*
55 -a^e+b*c/d
56 a*(b^c)+d*e
57 a^b^c*d
58 */