描述
小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*”,“/”,“^”,求出的值就是密码。小明数学学得不好,还需你帮他的忙。(“/”用整数除法)
格式
输入格式
共1行,为一个算式。
输出格式
共1行,就是密码。密码可以超过8位。
样例
输入样例
1+(3+2)*(7^2+6*9)/(2)
输出样例
258
限制
时间限制: 1000 ms
内存限制: 65536 KB
解析
这道题写了我好久,终于AC了,用了一种很笨的方法,一种一种情况去讨论,根据运算符的优先级来做,初始化两个栈,一个运算符栈,一个数字栈。
1、对于相同的运算符,栈外大于栈;
2、不论栈内还是栈外,乘、除、^永远大于加减;
3、栈内的“(”小于任何栈外的运算符,故此时将栈外的运算符直接入栈就好,相反,栈外的“(”大于任何栈内的运算符,故此时将“(”直接入栈就好;
4、栈外的“)”小于任何栈内的运算符,故将栈内的运算符出栈进行运算,如果此时栈内是“(”,直接出栈。
代码
#include <iostream>
#include<stack>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
stack<int> dig;
stack<char> op;
void YunSuan(int fuhao){
//"+":1 "-":2 "*":3" "/":4 "^":5
int tempa,tempb,ans;
tempb=dig.top();
dig.pop();
tempa=dig.top();
dig.pop();