本文共 1662 字,大约阅读时间需要 5 分钟。
主要内容:表达式求值。提交nyoj通过。。。
思路:主要就是一个开两个栈,然后一个操作符栈。一个操作数栈。
。
我的代码例如以下(比較简洁):
/***** Author Gery******/#include #include #include #include #include #include #include #include #include #include #define eps 1e-9#define ll long long#define INF 0x3f3f3f3fusing namespace std;const int maxn=1000+10;stack ly;stack gery;char str[maxn],op[maxn];char operation[7][7]//运算符的优先级{ {'>','>','<','<','<','>','>'},//'+' {'>','>','<','<','<','>','>'},//'-' {'>','>','>','>','<','>','>'},//'*' {'>','>','>','>','<','>','>'},//'/' {'<','<','<','<','<','=',','},//'(' {'>','>','>','>',',','>','>'},//')' {'<','<','<','<','<',',','='},//'='};int get_index(char ch){ switch(ch) { case '+':return 0; case '-':return 1; case '*':return 2; case '/':return 3; case '(':return 4; case ')':return 5; case '=':return 6; }}char get_prio(char a,char b){ int c=get_index(a); int d=get_index(b); return operation[c][d];}double cal_value(double a,double b,char c){ switch(c) { case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a*1.0/b; }}int main(){ int t,pd,cnt,i; double temp,left_value,right_value,val; char ch,Op; scanf("%d",&t); while(t--) { scanf("%s",str); ly.empty(); gery.empty(); gery.push('='); for(i=0;i ': Op=gery.top(),gery.pop(); right_value=ly.top(),ly.pop(); left_value=ly.top(),ly.pop(); val=cal_value(left_value,right_value,Op); ly.push(val); i--;break;//表达式运算后字符指针要后移 } } } printf("%.2lf\n",ly.top()); } return 0;}/*2((-2+3)*1.2+2)=((-2+3)*10/2)=*/
转载于:https://www.cnblogs.com/wzzkaifa/p/6829045.html