样例都过了,提交后只有测试点1、2、10对了。哪里错了啊?
#include <bits/stdc++.h>
using namespace std;
class polynome{
public:
int ratio[101],time;
void clear(){
for(int i=time;i>-1;i--)
ratio[i]=0;
time=0;
}
void mul(int n){
if(n==-1){
for(int i=time;i>-1;i--)
ratio[i+1]=ratio[i];
++time;
ratio[0]=0;
}
else{
for(int i=time;i>-1;i--)
ratio[i]*=n;
}
}
void add(polynome a){
time=max(time,a.time);
for(int i=0;i<=time;i++)
ratio[i]+=a.ratio[i];
}
void print(){
for(int i=time;i>-1;i--){
if(i==0&&ratio[i]!=0){
if(ratio[i]>0&&time)
printf("+");
printf("%d",ratio[i]);
}
else if(ratio[i]>0){
if(i!=time)printf("+");
if(ratio[i]!=1)
printf("%d",ratio[i]);
printf("n");
if(i!=1)
printf("^%d",i);
}
}
printf("\n");
}
};
polynome a[101];
int inde,cycle[101];
bool isbrk[101],isctn[101],isexit;
int read(){
char a[15];
int i=0,d=0;
scanf("%s",a);
if(a[0]=='n')return -1;
while(isdigit(a[i])){
d=d*10+a[i]-48;
++i;
}
return d;
}
inline bool isstop(){
return isbrk[inde]||isctn[inde];
}
void plu(){
int unit=read();
if(!isstop()){
if(unit>0)a[inde].ratio[0]+=unit;
else{
a[inde].time=max(a[inde].time,1);
++a[inde].ratio[1];
}
}
}
void inter(){
if(!isstop()){
cycle[++inde]=read();
a[inde].clear();
}
}
void exier(){
if(inde==0){
a[inde].print();
isexit=1;
return ;
}
if(!isbrk[inde])
a[inde].mul(cycle[inde]);
isbrk[inde]=isctn[inde]=0;
a[inde-1].add(a[inde]);
a[inde--].clear();
}
inline void brk(){
if(inde)isbrk[inde]=1;
}
inline void ctn(){
if(inde)isctn[inde]=1;
}
int main(){
char str[15];
scanf("%s",str);
while(!isexit){
scanf("%s",str);
switch(str[0]){
case 'o':
plu();
break;
case 'l':
inter();
break;
case 'e':
exier();
break;
case 'b':
brk();
break;
case 'c':
ctn();
break;
}
}
return 0;
}
手写多项式。。