rt,一直过不去第八组,求Hack/查错
#include<bits/stdc++.h>
using namespace std;
string ss;
char s[1001];
int n;
int tong[31],nn;
struct p
{
int zhi,xi;
}A[10001],B[10001],ans[10001];
int cnt,ccnt,Cnt;
int getshu(int &i)
{
int x=0;
for(;s[i]>='0'&&s[i]<='9'&&i<n;i++)
x=(x<<1)+(x<<3)+s[i]-'0';
return x;
}
int getfu(char c)
{
if(c=='+') return 1;
return -1;
}
int main()
{
while(getline(cin,ss))
{
memset(ans,0,sizeof(ans));
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
nn=ss.length(),n=0;
cnt=ccnt=Cnt=0;
for(int i=0;i<nn;i++)
if(ss[i]!=' ')
s[n++]=ss[i];
register int ii=0,xi=0,zhi=0,fu=1;
for(ii=0;ii<n;ii++)
{
if(s[ii]==')'||s[ii]=='(')
continue;
if(s[ii]=='*')
{
ii++;
break;
}
xi=getshu(ii);
if(s[ii]!='a')
{
tong[0]+=xi;
}
if(s[ii]==')'||s[ii]=='(')
{
continue;
}
if(s[ii]=='*')
break;
if(s[ii]!='a')
fu=getfu(s[ii]);
else
ii+=2,tong[getshu(ii)]+=xi;
}
for(int i=0;i<=30;i++)
{
if(tong[i])
cnt++,A[cnt].xi=tong[i],A[cnt].zhi=i;
tong[i]=0;
}
for(;ii<n;ii++)
{
if(s[ii]==')'||s[ii]=='(')
continue;
if(s[ii]=='*')
break;
xi=getshu(ii);
if(s[ii]!='a')
{
tong[0]+=xi;
}
if(s[ii]==')'||s[ii]=='(')
{
continue;
}
if(s[ii]=='*')
break;
if(s[ii]!='a')
fu=getfu(s[ii]);
else
ii+=2,tong[getshu(ii)]+=xi;
}
for(int i=0;i<=30;i++)
{
if(tong[i])
ccnt++,B[ccnt].xi=tong[i],B[ccnt].zhi=i;
tong[i]=0;
}
for(int i=1;i<=cnt;i++)
for(int j=1;j<=ccnt;j++)
tong[A[i].zhi+B[j].zhi]+=A[i].xi*B[j].xi;
for(int i=0;i<=30;i++)
{
if(tong[i])
Cnt++,ans[Cnt].xi=tong[i],ans[Cnt].zhi=i;
tong[i]=0;
}
if(ccnt>0)
{
cout<<ans[Cnt].xi;
if(ans[Cnt].zhi!=0)
cout<<"a^"<<ans[Cnt].zhi;
for(int i=Cnt-1;i>=1;i--)
{
if(ans[i].xi>0)
cout<<"+";
cout<<ans[i].xi;
if(ans[i].zhi!=0)
cout<<"a^"<<ans[i].zhi;
}
}
else
{
for(int i=0;i<n;i++)
cout<<s[i];
// cout<<A[cnt].xi;
// if(A[cnt].zhi!=0)
// cout<<"a^"<<A[cnt].zhi;
// for(int i=cnt-1;i>=1;i--)
// {
// if(A[i].xi>0)
// cout<<"+";
// cout<<A[i].xi;
// if(A[i].zhi!=0)
// cout<<"a^"<<A[i].zhi;
// }
}
cout<<endl;
}
return 0;
}