NYOJ 접미사 식 접미사 식

접미사 식
제목 설명:
사람들의 일상적인 습관 은 산술 표현 식 을 접미사 식 으로 쓰 는 것 이지 만 기계 에 있어 서 는 접미사 식 에 더욱 익숙 하 다. 산술 표현 식 의 접미사 식 과 접미사 식 에 관 한 논술 은 일반적인 데이터 구조 서 는 모두 관련 내용 을 참고 할 수 있다. 여 기 는 더 이상 군말 하지 않 는 다. 현재 당신 의 임 무 는 접미사 식 을 접미사 식 으로 바 꾸 는 것 이다.
입력 설명:
         n,  n     (n<10)。
          ,        1000    ,           ,        “=”  。         +-*/         。           。                 。

데이터 보증 나 누 기 는 0 이 되 지 않 습 니 다.
출력 설명:
                ,                。

샘플 입력:
2
1.000+2/4=
((1+2)*5+1)/4=

샘플 출력:
1.000 2 4 / + =
1 2 + 5 * 1 + 4 / =

이 문 제 는 바로 '답답 한 C 소 가 (一)' 를 바탕 으로 출력 에 조건 을 붙 이 고 인접 한 조작 수 조작 부 호 를 빈 칸 으로 분리 하도록 요구 하 는 것 이다. 그래서 나 는 모든 조작 수의 뒤에 '\ #' 를 추가 하여 연 결 된 조작 수 를 쉽게 구분 하고 코드 코드 코드 를 구체 적 으로 볼 수 있다.
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char x[10005];
mapmp;
void init()
{
    scanf("%s",x);
    int len=strlen(x);
    queues2;  //   
    stacks1;  //   
    for(int i=0; i='0'&&x[i]<='9')
        {
            while(x[i]>='0'&&x[i]<='9'||x[i]=='.')
            {
                s2.push(x[i]);
                i++;
            }
            i--;
            s2.push('#');
        }
        else
        {
            if(x[i]==')')
            {
                while(1)
                {
                    char s=s1.top();
                    if(s=='(')
                        break;
                    s2.push(s);
                    s1.pop();
                }
                s1.pop();
            }
            else if(x[i]=='('||s1.empty())
                    s1.push(x[i]);
            else
            {
                while(1)
                {
                    if(s1.empty())
                        break;
                    char s=s1.top();
                    if(mp[x[i]]>mp[s]||s1.empty())
                        break;
                    s1.pop();
                    s2.push(s);
                }
                s1.push(x[i]);
            }
        }
    }
    while(!s1.empty())
    {
        char s=s1.top();
        s2.push(s);
        s1.pop();
    }
    while(!s2.empty())
    {
        if(s2.front()>='0'&&s2.front()<='9'||s2.front()=='.')
            printf("%c",s2.front());
        else if(s2.front()=='#')
            printf(" ");
        else
            printf("%c ",s2.front());
        s2.pop();
    }
    printf("
"); } int main() { mp['*']=mp['/']=2,mp['+']=mp['-']=1,mp['(']=0; int t; scanf("%d",&t); while(t--) { memset(x,0,sizeof(x)); init(); } return 0; }

좋은 웹페이지 즐겨찾기