判断两个表达式是否相同。
代码:
#include<iostream>
#include<fstream>
#include<stack>
using namespace std;
char c1[2000],c2[2000];
char s1[2000],s2[2000],s[2000];
int a[126];
int ok(char c){
if(c>='0'&&c<='9') return 1;
if(c>='a'&&c<='z') return 1;
return 0;
}
void solve(char c[]){
int i,j,k;
j=0;
stack<char> q;
for(i=0;i<strlen(c);i++)
{
if(ok(c[i]))
s[j++]=c[i];
else
if(c[i]=='(') q.push(c[i]);
else
if(c[i]==')')
{
while(q.top()!='(')
{
s[j++]=q.top();
q.pop();
}
q.pop();
}
else
if(c[i]=='+'||c[i]=='-'||c[i]=='*')
{
while(!q.empty()&&a[c[i]]<=a[q.top()])
{
s[j++]=q.top();
q.pop();
}
q.push(c[i]);
}
}
while(!q.empty()){
s[j++]=q.top();
q.pop();
}
s[j]='\0';
}
int compute(char s1[]){
int i,j,k;
stack<int> q;
for(i=0;i<strlen(s1);i++)
{
if(ok(s1[i]))
{
if(s1[i]>='0'&&s1[i]<='9')
q.push(s1[i]-'0');
else
q.push(s1[i]);
}
else
{
j=q.top();
q.pop();
k=q.top();
q.pop();
if(s1[i]=='+')
j=j+k;
if(s1[i]=='-')
j=k-j;
if(s1[i]=='*')
j=k*j;
q.push(j);
}
}
return q.top();
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
a['+']=1;
a['-']=1;
a['*']=2;
a['(']=0;
cin>>cas;
getchar();
while(cas--){
cin.getline(c1,2000);
cin.getline(c2,2000);
solve(c1);
strcpy(s1,s);
solve(c2);
strcpy(s2,s);
i=compute(s1);
j=compute(s2);
if(i==j) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
int main(){
read();
return 0;
}