正常的表達式 逆波蘭表達式
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;
}
