洛谷P1067 多项式输出题解
P1067多项式输出 题目地址
该题其实不是很难,思路简单,但是很让人难受,要讨论各种情况。
我写代码的思路就是把所有情况分为四种:
1、最高次项的处理;
2、常数项的处理;
3、一次项的处理;
4、其他非特殊项的处理。
为什么要这么分类呢?分类的依据是因为前三类关于项数系数的处理比较复杂,考虑到的情况比较多。
另外还有在我个人认为此题关于最高次项系数能否为0的问题表述的不清楚。
相关代码我已经用了批注,代码写的不好,水平有待提高,我会继续努力的。
话不多说,请看代码:
/*
* 洛谷P1067多项式输出
* 2020 03 13
* write by Miubai
*/
#include<stdio.h>
#define A a[i]
int main(void){
int a[201];
int i,n,b;
scanf("%d",&n);
b = n;
for(i = 0;i<=n;i++){
scanf("%d",&A);
}
for(i = 0;i<=n;i++){
if(n == b){ //第一项判断
if (1 == A)
printf("x^%d",b);
else if (-1 == A)
printf("-x^%d",b);
else if (A>0)
printf("%dx^%d",A,b);
else if(A<0)
printf("%dx^%d",A,b);
}else if(1 == b) { //一次项的判断
if (1 == A)
printf("+x");
else if (-1 == A)
printf("-x");
else if(A>0)
printf("+%dx",A);
else if (A<0)
printf("%dx",A);
}else if (0 == b){ //常数项的判断
if (A>0)
printf("+%d",A);
else if (A<0)
printf("%d",A);
}else { //其他非特殊项
if(A > 0){ //系数大于0
if(A == 1)
printf("+x^%d",b);
else
printf("+%dx^%d",A,b);
}
if(A<0){ //系数小于0
if(-1 == A)
printf("-x^%d",b);
else
printf("%dx^%d",A,b);
}
}
b--;
}
return 0;
}
谢谢!