正常的表達式 逆波蘭表達式
a+b ---> a,b,+
a+(b-c) ---> a,b,c,-,+
a+(b-c)*d ---> a,b,c,-,d,*,+
a+d*(b-c)--->a,d,b,c,-,*,+
a=1+3 ---> a=1,3 +
代碼運算如下:
#include "iostream" #include "string" #include "stack" using namespace std; int main() { string str; stack<int> sk; int s = 0, l = 0, r = 0; cout << "請輸入逆波蘭公式:" << endl; while (cin>>str) { if (str[0] == '#') { break; } //如果第一個是0-9數字則轉換為數字壓棧 else if (isdigit(str[0])) { sk.push(atoi(str.c_str())); } else { l = sk.top(); sk.pop(); r = sk.top(); sk.pop(); switch (str[0]) { case '+': s = r + l; break; case '-': s = r - l; break; case '*': s = r * l; break; case '/': s = r / l; break; } //把計算的結果再次壓棧 sk.push(s); } } cout << "結果為:" << s << endl; system("pause"); return 0; }