Hide

Problem A
Miniräknare med postfixnotation, infixnotation till postfixnotation

Languages en sv

Du ska implementera en miniräknare som använder postfixnotation i sin inre representation. Postfixnotation är ett sätt att skriva uttryck på som gör det extra effektivt för datorn att evaluera dem, jämfört med den normala infixnotationen som du hittills använt i matematiken.

Denna miniräknare hanterar aritmetiska uttryck som består av en avgränsad mängd symboler: positiva heltal, operatorerna $\texttt{+}, \texttt{-}, \texttt{*}, \texttt{/}$ samt höger- och vänsterparentes.

I normal infixform befinner sig operatorerna mellan operanderna, och parenteser används för att klargöra i vilken ordning operationerna ska utföras. Som vanligt har $\texttt{*}$ och $\texttt{/}$ högre prioritet än $\texttt{+}$ och $\texttt{-}$, parenteser anger att uttryck däri utvärderas först, och om det finns flera operatorer med samma prioritet så utförs operationerna från vänster till höger.

I postfixform placeras operatorerna efter operanderna. Parenteser behövs ej, utan ordningen på operationerna framgår av notationen. Postfixnotationen beräknas genom att bearbeta operander och operatorer i den ordning de dyker upp, från vänster till höger. När en operator stöts på, utförs operationen på de senaste operanderna i uttrycket.

Nedan följer några exempel på uttryck i dess infixform respektive dess postfixform:

  • "2 + 3" $\ \ \rightarrow \ \ $ "2 3 +"

  • "14 * ( 2 + 3 )" $\ \ \rightarrow \ \ $ "14 2 3 + *"

  • "( ( 3 + 5 * 1 ) / 8) * 14 " $\ \ \rightarrow \ \ $ "3 5 1 * + 8 / 14 *"

Indata

Det kommer finnas en rad av indata. Intadan är ett infixuttryck $U_1 \ldots U_N$, där $U_i$ är antingen en operand (ett positivt heltal), en operator ($\texttt{+}$, $\texttt{-}$, $\texttt{*}$ eller $\texttt{/}$) eller en parentes (vänster- eller högerparentes).

Infixuttrycket kommer vara separerade med mellanslag mellan alla $U_i$, och det är garanterat summan av antalet operander, operatorer och parentser är mindre än 5000, alltså att $N < 5000$. Om $U_i$ är ett heltal, är det även garanterat att $0 \leq U_i \leq 1000$.

I den här uppgiften garanteras att infixuttrycket är giltigt.

Utdata

Skriv ut det givna uttrycket i dess postfixform, med mellanslag mellan alla operander och operatorer.

Förklaring av Exempelfall 1

Postfixformen för "2 + 3" är "2 3 +". Notera dock att postfixformen "3 2 +" ger samma resultat som den givna infixformen, men talen i uttrycket bör skrivas i samma ordning som givet infixformen, och därför är "3 2 +" inte rätt svar.

Sample Input 1 Sample Output 1
2 + 3
2 3 +
Sample Input 2 Sample Output 2
4 * 3 - 2
4 3 * 2 -
Sample Input 3 Sample Output 3
( 3 + 4 ) / 7 + ( 8 / 4 - 9 / 3 )
3 4 + 7 / 8 4 / 9 3 / - +
Sample Input 4 Sample Output 4
( ( ( 120 / 5 + 6 ) / 10 * 5 ) + 36 - 1 ) / 25
120 5 / 6 + 10 / 5 * 36 + 1 - 25 /
Sample Input 5 Sample Output 5
( ( 3 + 5 * 1 ) / 8 ) * 14
3 5 1 * + 8 / 14 *