1. 程式人生 > >利用棧完成後綴表示式的計算

利用棧完成後綴表示式的計算

字尾表示式不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *。利用棧結構,將字尾表示式的結果計算出來。

輸入

字尾表示式。以#號作為表示式結束標誌。為了簡單,處理的資料為0-9的整數。

輸出

計算結果。

樣例輸入

3 6 6 2 / - 3 * +#

樣例輸出

12

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cstdlib>
#include<stack>
using namespace std;
typedef int ElemType;
int main()
{
	stack<int>s;
	char a[1001];
	int n;
	for (n  = 0;; n++)
	{
		scanf("%c", &a[n]);
		if (a[n] == '#')break;
	}
	for (int i  = 0; i < n; i++)
	{
		if (a[i] >= '0'&&a[i] <= '9')
			s.push(a[i] - '0');
		else
		{
			if (a[i] == ' ')continue;
			if (a[i] == '-')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  - b;
				s.push(sum);
			}
			if (a[i] == '+')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  + b;
				s.push(sum);
			}
			if (a[i] == '/')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  / b;
				s.push(sum);
			}
			if (a[i] == '*')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a * b;
				s.push(sum);
			}
		}
	}
	cout  << s.top();
	s.pop();
	return 0;
}