这题让我做成这样,也是醉了,看来做题方法很重要,不然会很坑!!!
解法:字符串模拟!
#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; }
