後序運算式


Submit solution

分數: 100 (partial)
時間限制: 1.0s
記憶體限制: 1G

作者:
題目類型
允許的語言
Assembly, Brainfuck, C, C++, Python

後序運算式,又稱逆波蘭表示法,是一種運算式的記法。
平常我們使用的運算式如 \(A + B\) 為中序運算式,即運算子在兩運算元中間。
可是這種表示法必須用括弧來表示運算順序,電腦不易解析。因此,現代電腦大多利用堆疊與後序運算式以減少記憶體用量。
後序運算式的運算子在兩運算元之後,如 \(A B +\) 即為中序式之 \(A + B\)。優點是不用處理運算子優先權順序,當中序運算式存在大量括弧實不受影響,比如中序式 \((A + B) * (C + D)\) 以後序式記為 \(A B + C D + *\)。
現在給你一個後序運算式,請你計算其結果。

注意

本題的 '\(/\)' 為整數除法,總是向 \(0\) 取整。例如 C/C++ 中,\(-3 / 2 = 3 / -2 = -1\),為向 \(0\) 取整;但 Python 中 \(-3 / 2 = 3 / -2 = -2\) ,為向下取整。
而取模的部分,我們則依照 Knuth 教授的定義,其值總是與除數同號。例如 Python 中 \(-3 % 2 = 1, 3 % -2 = -1\),可是 C/C++ 中,\(-3 % 2 = -1, 3 % -2 = 1\)。

輸入格式

一後序運算式,運算元為大寫英文字母,運算子包含 '\(+\)', '\(-\)', '\(*\)', '\(/\)', '\(\%\)' 等五種。

輸出格式

後序運算式計算後的結果。

範例輸入

1 2 + 3 4 + *

範例輸出

21

提示

可以利用 stringstream 讀取。

string str;
getline(cin, str);
stringstream ss(str);
// ...
while (ss >> str)
{
    if(isdigit(str[0]))
    {
        // 此時 str 為整數, stoi(str)
        continue;
    }
    // ...
    switch(str[0])
    {
        case'+':
        // ...
        break;
        case'-':
        // ...
        break;
        case'*':
        // ...
        break;
    }
}

評論


  • 0
    dc  commented on 十月 19, 2024, 10:58 a.m.

    除法時 python 向 0 取整。