C++
#include <cstdio>
#include <stack>
using namespace std;
char arr[1000],arr2[1000];//arr2=postfix array
stack <char> stk;
stack <int> stk2;
int rtn_turn(char a){
switch(a){
case '*':
case '/':
return 1;
break;
case '+':
case '-':
return 2;
break;
case '(':
return 3;
break;
case ')':
return 4;
break;
case ' ':
return 5;
break;
}
return -1;
}
int calc(){
int i=0;
while(arr2[i]!='\0'){
int rtn=rtn_turn(arr2[i]);
if(rtn==-1){
int a=(int)arr2[i++]-48;
while(rtn==-1&&arr2[i]!=' '){
rtn=rtn_turn(arr2[i]);
if(rtn!=-1)
break;
a*=10;
a+=(int)arr2[i]-48;
i++;
}
while(arr2[i]==' '){
i++;
}
stk2.push(a);
continue;
}
else{
int a=stk2.top(),b;
stk2.pop();
b=stk2.top();
stk2.pop();
switch(arr2[i]){
case '+':
stk2.push(a+b);
break;
case '-':
stk2.push(b-a);
break;
case '*':
stk2.push(a*b);
break;
case '/':
int d=b/a;
stk2.push(d);
break;
}
i++;
while(arr2[i]==' '){
i++;
}
}
}
int c=stk2.top();
stk2.pop();
return c;
}
int main()
{
scanf("%s",arr);
int i=0,idx=0;
while(arr[i]!='\0'){
int rtn=rtn_turn(arr[i]);
if(rtn==-1){
arr2[idx++]=arr[i];
}else if(rtn==3){
stk.push(arr[i]);
}else if(rtn==4){
while(!stk.empty()){
if(stk.top()=='('){
stk.pop();
break;
}
arr2[idx++]=' ';
arr2[idx++]=stk.top();
stk.pop();
}
}else{
arr2[idx++]=' ';
if(!stk.empty()&&rtn_turn(stk.top())<=rtn){
while(!stk.empty()){
if(stk.top()=='('||rtn_turn(stk.top())>rtn){
break;
}
arr2[idx++]=' ';
arr2[idx++]=stk.top();
stk.pop();
}
}
stk.push(arr[i]);
}
i++;
}
while(!stk.empty()){
arr2[idx++]=stk.top();
stk.pop();
}
printf("%d",calc());
return 0;
}
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 안내사항 | 관리자 | 2019.12.02 | 179 |
| 201 | 4893 | 관리자 | 2019.12.20 | 149 |
| 200 | 4878 | 관리자 | 2019.12.20 | 149 |
| 199 | 4848 | 관리자 | 2019.12.20 | 152 |
| 198 | 4698 | 관리자 | 2019.12.20 | 148 |
| 197 | 4685 | 관리자 | 2019.12.20 | 206 |
| 196 | 4073 | 관리자 | 2020.04.06 | 160 |
| 195 | 4068 | 관리자 | 2020.04.06 | 219 |
| 194 | 4065 | 관리자 | 2019.12.20 | 155 |
| » | 4064 | 관리자 | 2020.04.06 | 157 |
| 192 | 4059 | 관리자 | 2020.04.06 | 5941 |
| 191 | 4055 | 관리자 | 2020.04.06 | 156 |
| 190 | 4044 | 관리자 | 2020.04.06 | 167 |
| 189 | 4043 | 관리자 | 2020.04.06 | 155 |
| 188 | 4040 | 관리자 | 2020.04.06 | 154 |
| 187 | 4039 | 관리자 | 2019.12.20 | 157 |
| 186 | 4035 | 관리자 | 2020.04.06 | 159 |
| 185 | 4034 | 관리자 | 2020.04.06 | 151 |
| 184 | 4028 | 관리자 | 2020.04.06 | 175 |
| 183 | 4023 | 관리자 | 2019.12.20 | 178 |
| 182 | 3740 | 관리자 | 2019.12.20 | 218 |
| 181 | 3730 | 관리자 | 2019.12.20 | 181 |
| 180 | 3719 | 관리자 | 2019.12.20 | 158 |
| 179 | 3716 | 관리자 | 2019.12.20 | 147 |
| 178 | 3713 | 관리자 | 2019.12.20 | 167 |
| 177 | 3712 | 관리자 | 2019.12.20 | 164 |
| 176 | 3709 | 관리자 | 2019.12.20 | 150 |
| 175 | 3708 | 관리자 | 2019.12.20 | 117 |
| 174 | 3707 | 관리자 | 2019.12.20 | 112 |
| 173 | 3705 | 관리자 | 2019.12.20 | 115 |