题意分析
给出一个度为8的多项式,按照书写的格式将其输出出来。
注意如果系数为1的时候,不要输出多余的1,如果第一个系数为负,要输出一个符号。如果多项式的次数为1,不要输出多余的1.
思路就是先找到一个系数不为1的,然后将其输出,输出的时候注意正负,而且要特判是否系数为1,特判是否为次数为1,特判是否是常数项。
如果找到了一个,那么说明多项式不为0,否则为零。
接下来写一个OutPut函数,此函数就是输出一位系数。在函数中也是要判断是否系数为1,是否次数为1,是否为常数项。
代码总览
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int nmax = 10;
int index[nmax];
bool isAbsOne(int tar) {return abs(tar) == 1;}
bool isZero(int tar) {return tar == 0;}
void Output(int now){
if(index[now] == 0) return;
else if(index[now] > 0) printf(" + ");
else printf(" - ");
if(now == 1){
if(index[now] == 1) printf("x");
else printf("%dx",abs(index[now]));
}else if(now == 0){
printf("%d",abs(index[now]));
}else{
if(index[now] == 1) printf("x^%d",now);
else printf("%dx^%d",abs(index[now]),now);
}
}
int main(){
while(scanf("%d",&index[8]) != EOF){
for(int i = 7;i>=0;--i) scanf("%d",&index[i]);
int now = 8;
while(index[now] == 0 && now >=0){
now--;
}
if(now < 0){
printf("0\n");
continue;
}
if(isAbsOne(index[now])){
if(index[now] < 0) printf("-");
if(now == 1) printf("x");
else if(now == 0) printf("1");
else printf("x^%d",now);
}else{
if(index[now]<0) printf("-");
if(now == 1) printf("%dx",abs(index[now]));
else if(now == 0) printf("%d",abs(index[now]));
else printf("%dx^%d",abs(index[now]),now);
}
for(int i = now-1;i >=0 ;--i) Output(i);
printf("\n");
}
return 0;
}