求助,30pt
查看原帖
求助,30pt
521592
庄nnnn额楼主2021/8/27 14:40

样例都过了,提交后只有测试点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;
}

手写多项式。。

2021/8/27 14:40
加载中...