题目
思路
中缀转成逆波兰表达式再按栈的特性操作
如何转换?也是利用栈特性:
①数字放在数字的栈里面
②操作栈若为空 随便放
③(*/都是随便放的
④当遇见‘)’的时候,把操作栈逐个排出(每次排除拿数字栈的两个元素进行操作再塞回去结果),直到遇见‘(’,此时把‘(’弹出
⑤塞入+和-的时候,若前一个操作为‘*’或者‘/’,我们就弹出元素直到遇见左括号或者栈空
代码
#include<iostream>
#include<string.h>
using namespace std;
int cal(int a, int b, char c)
{
//cout << "a " << a <<" b " << b <<" c "<<c << endl;
switch (c)
{
case '+':
return a + b;
break;
case '-':
return b - a;
break;
case '*':
return a * b;
break;
case '/':
return b / a;
break;
default:
break;
}
}
void print(int* a, int n)
{
for(int i = 0 ; i < n; i++)
cout << a[i] << " ";
cout << endl;
cout << n << endl;
}
int main()
{
char ope[1000];
int num[1000]