这题让我做成这样,也是醉了,看来做题方法很重要,不然会很坑!!!
解法:字符串模拟!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
string str,s;
cin>>str>>s;
int op=str.find('='),len=str.size();
int op1=s.find('='),len1=s.size(),flag=0;
string num;
num=s.substr(op1+1,len1-op1);
if(num[0]=='-')
flag=1;
string tmp;
if(isdigit(str[op+1])||str[op+1]=='x')
tmp+='+';
for(int i=op+1;i<len;i++)
{
if(str[i]=='x')
{
if(!isdigit(str[i-1]))
{
tmp+="1*";
tmp+=num;
}
else
{
tmp+='*';
tmp+=num;
}
}
else
tmp+=str[i];
}
int len2=tmp.size();
long long sum=0;
for(int i=0;i<len2;i++)
{
if(tmp[i]=='-')
{
i++;
int n=0,f=0,m=0,zh=0,f2=0;
while(i<len2&&isdigit(tmp[i]))
{
n=n*10+tmp[i]-'0';
i++;
}
if(tmp[i]=='*')
{
i++;
if(flag)
i++;
while(i<len2&&isdigit(tmp[i]))
{
m=m*10+tmp[i]-'0';
i++;
}
if(flag)
m=0-m;
f2=1;
}
if(tmp[i]=='^')
{
i++;
while(i<len2&&isdigit(tmp[i]))
{
zh=zh*10+tmp[i]-'0';
i++;
}
f=1;
}
if(f2)
{
if(f)
sum-=n*pow(m,zh);
else
sum-=n*m;
}
else
{
if(f)
sum-=pow(n,zh);
else
sum-=n;
}
i--;
}
else if(tmp[i]=='+')
{
i++;
int n=0,f=0,m=0,zh=0,f2=0;
while(i<len2&&isdigit(tmp[i]))
{
n=n*10+tmp[i]-'0';
i++;
}
if(tmp[i]=='*')
{
i++;
if(flag)
i++;
while(i<len2&&isdigit(tmp[i]))
{
m=m*10+tmp[i]-'0';
i++;
}
if(flag)
m=0-m;
f2=1;
}
if(tmp[i]=='^')
{
i++;
while(i<len2&&isdigit(tmp[i]))
{
zh=zh*10+tmp[i]-'0';
i++;
}
f=1;
}
if(f2)
{
if(f)
sum+=n*pow(m,zh);
else
sum+=n*m;
}
else
{
if(f)
sum+=pow(n,zh);
else
sum+=n;
}
i--;
}
}
cout<<"f(x)="<<sum<<"\n";
}
return 0;
}