洛谷题解P1067 多项式输出

原题传送门

Description

给定一个最高次为 \(n\) ,且形如 \(a_nx^n\ +\ a_{n-1}x^{n-1}\ +\ \cdots +\ a_1x_1\ +\ a_0 (a_n\neq 0)\) 的多项式的各项系数(即 \(a_n,a_{n-1},\cdots ,a_0\)),请写出此多项式。

这里写的规则可以归纳成以下几条 :

  • 若 \(a_n>0\) ,则省略 \(+\) 号,反之,输出 \(a_n\)。
  • 多项式的每一项与每一项之间都应有 \(+\) 或 \(-\) 进行连接,此符号取决于该位置后面的项的系数的正负。
  • 该项系数为 \(0\) 时,该项与其前面的符号一同省略。
  • 对于一次项 \(a_1x^1\) ,当 \(a_1\neq 0\) 时,输出 \(a_1x\),并非 \(a_1x^1\)。

Solution

很显然的一道模拟题,不过有很多注意的点。

具体规则在 Description 中已经阐明,这里需特别强调

  • 输入时按照 \(x\) 的次数由高到低递减输入。

  • 输出格式即按照 \(a_nx^n\ +\ a_{n-1}x^{n-1}\ +\ \cdots +\ a_1x_1\ +\ a_0\) 的格式

那我们可以把整个大问题分成 \(4\) 个子问题,以及由这 \(4\) 个子问题衍生而生的子问题 :

  • 输出 \(a[n]\) 。
    • 特判 \(a[n]=1\) 和 \(a[n]=-1\) 的情况。
    • 其余数字直接按照格式输出。
  • 输出 \(a[n-1]\) 至 \(a[2]\) (设 \(i\in [2,n-1]\))。
    • 分 \(a[n]=0\) , \(a[n]=1\) , \(a[n]=-1\) 和 \(a[n]>0\) 讨论(依次)。
    • 其余数字(即 \(a[n]<0\) 的情况)直接按照格式输出。
  • 输出 \(a[1]\) 。
    • 分 \(a[1]=1\) , \(a[n]=-1\) , \(a[1]>0\) , \(a[1]\neq 0\) 讨论(\(a[1]\neq 0\) 需放在最后)。
  • 输出 \(a[0]\) 。
    • 分 \(a[0]>0\) 和 \(a[0]<0\) 讨论。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
inline void read(int &x){
	int f=1;
	char ch=getchar();
	x=0;
	while(ch<'0'||ch>'9'){
	    if(ch=='-') f=-1;
	    ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
	    x=(x<<3)+(x<<1)+(ch&15);
	    ch=getchar();
	}
	x*=f;
}
int n;
int a[101];
int main(){
	read(n);
	for(int i=n;i>=0;i--) read(a[i]);
	
	if(a[n]==1) printf("x^%d",n);
	else if(a[n]==-1) printf("-x^%d",n);
	else printf("%dx^%d",a[n],n);
	
	for(int i=n-1;i>=2;i--){
		if(a[i]==0) continue;
		if(a[i]==1){
			printf("+x^%d",i);
			continue;
		}
		if(a[i]==-1){
			printf("-x^%d",i);
			continue;
		}
		if(a[i]>0){
			printf("+%dx^%d",a[i],i);
			continue;
		}
		printf("%dx^%d",a[i],i);
	}
	
	if(a[1]==1) printf("+x");
	else if(a[1]==-1) printf("-x");
	else if(a[1]>0) printf("+%dx",a[1]);
	else if(a[1]!=0) printf("%dx",a[1]);
	
	if(a[0]>0) printf("+%d",a[0]);
	else if(a[0]<0) printf("%d",a[0]);
	return 0;
}
上一篇:2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数


下一篇:mmdetection 训练 Faster R-CNN