後序運算式
後序運算式,又稱逆波蘭表示法,是一種運算式的記法。
平常我們使用的運算式如 \(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;
}
}
留言
除法時 python 向 0 取整。