题目链接 点我传送
思路:
这是一道水题,简单的模拟,也没啥坑,主要是细心。
由于需要遵循多项式的法则,呢么就有几种特殊情况需要注意。
读题可知 多项式的次数是已经确定的 依次是 n n-1 n-2 n-3 .......1 0
1、多项式的首项的系数如果是正数 不用输出+号
2、x的1次方 不能打印 x^1 而是直接打印x
3、x的系数为1 或者-1 的时候 1 省略不写
4、第n+1位 如果系数为1 按理应该省略不写 但同时指数为0 所以系数的1 不能省略
样例 3(n) 0 1 2 1 答案如下
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int maxn=1e5+7;
typedef struct node{
int x,y;
}node;
node a[maxn];
int n,xx,yy;
int main(){
scanf("%d",&n);
for(int i=1;i<=n+1;i++){
scanf("%d",&a[i].x);
a[i].y=n-i+1;
}
int flag=0;
for(int i=1;i<=n+1;i++){
if(a[i].x==0)continue;
if(a[i].x>0){
if(flag!=0)//第一项不用输+
printf("+");
}
if(a[i].x<0){
printf("-");
}
if(a[i].x<0)a[i].x=-a[i].x;
if(a[i].x!=1){//系数不为1 打印系数
printf("%d",a[i].x);
}
else{//系数为1 只有指数为0的情况下才写系数
if(a[i].y==0)printf("1");
}
if(a[i].y!=0){//指数不为0 处理指数
if(a[i].y==1)printf("x");//指数为1 省略不写
else printf("x^%d",a[i].y);//不为1 打印指数部分
}
flag=1;//一但有了输出就不是第一项了
}
return 0;
}