表达式求值
来源:互联网 发布:皇室战争大雷电数据 编辑:程序博客网 时间:2024/06/05 09:45
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x3f3f3f3f#define Max 110int max(int a,int b){return a>b?a:b;}int min(int a,int b){return a<b?a:b;}int num[100];int topnum,topop,tailnum,tailop;char op[100];inline int judge(char op1,char op2){ if(((op1=='+'||op1=='-')&&(op2=='+'||op2=='-'||op2==')'))||((op1=='*')&&(op2=='*'||op2=='+'||op2=='-'||op2==')'))) return 1; else if(op1=='('&&op2==')') return 0; else return -1;}inline int cal(int a,int b,char op){ if(op=='+') return a+b; else if(op=='-') return a-b; else return a*b;}inline int solve(char str[]){ int i; topnum=topop=tailnum=tailop=0; int len=strlen(str); int cnt=0; for(i=0;i<len;i++) { if(str[i]!=' ') str[cnt++]=str[i]; } str[cnt]=')'; i=0; op[++topnum]='('; // op.push('('); while(i<=cnt) { // printf("a\n"); if(str[i]!='+'&&str[i]!='-'&&str[i]!='*'&&str[i]!='('&&str[i]!=')') { if(str[i]>='0'&&str[i]<='9') num[++topnum]=str[i]-'0'; else num[++topnum]=str[i]; i++; } else { int tmp=judge(op[topop],str[i]); // printf("i %d tmp %d\n",i,tmp); if(tmp==1) { int a,b; a=num[topnum]; topnum--; b=num[topnum]; topnum--; num[++topnum]=cal(b,a,op[topop]); // printf("num %d\n",num.top()); topop--; // op.push(str[i]); } else if(tmp==0) { topop--; i++; } else { op[++topop]=str[i]; i++; } } } return num[topnum];}int main(){ int n; char str[100]; scanf("%d",&n); getchar(); while(n--) { int tmp1,tmp2; gets(str); tmp1=solve(str); gets(str); tmp2=solve(str); // printf("tmp1 %d tmp2 %d\n",tmp1,tmp2); if(tmp1==tmp2) printf("YES\n"); else printf("NO\n"); }}