题目描述
一元 n 次多项式可用如下的表达式表示:
其中,aixi称为 i 次项,ai 称为 i 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:
1.多项式中自变量为 x,从左到右按照次数递减顺序给出多项式。
2.多项式中只包含系数不为 0 的项。
3.如果多项式 n 次项系数为正,则多项式开头不出现“+”号,如果多项式 n 次项系
数为负,则多项式以“-”号开头。
4.对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。
紧跟一个正整数,表示此项系数的绝对值(如果一个高于 0 次的项,其系数的绝对值为 1,则无需输出 1)。
如果 x 的指数大于 1,则接下来紧跟的指数部分的形式为“x^b”,其中 b 为 x 的指数;
如果 x 的指数为 1,则接下来紧跟的指数部分形式为“x”;
如果 x 的指数为 0,则仅需输出系数即可。
5.多项式中,多项式的开头、结尾不含多余的空格。
输入格式:
输入共有 2 行
第一行 1 个整数,n,表示一元多项式的次数。
第二行有 n+1 个整数,其中第 i 个整数表示第 n-i+1 次项的系数,每两个整数之间用空格隔开。
输出格式:
输出共 1 行,按题目所述格式输出多项式。
输入样例1:
5
100 -1 1 -3 0 10
输出样例1:
100x^5 - x^4 + x^3 - 3x^2+10
输入样例2:
3
-50 0 0 1
输出样例2:
-50x^3+1
【数据范围】
对于100%数据,0<=n<=100,-100<=系数<=100
解题思路
纯模拟,对于第一题来说难度较高,容易考虑漏,只拿到部分分。
不说多,直接在代码上面注释
代码
#include <stdio.h>
#include <iostream>
using namespace std;
int main(){
int a;
int sum[101];
cin>>a;
for(int i=0;i<a+1;i++){
cin>>sum[i];
}
//第一个数
if(sum[0]==1){//第一个数是正的时候不需要+,例如1不是+1一样
printf("x^%d",a);//当a是1的时候不是1a^n,只是a^n,需要特殊说明。
}else if(sum[0]==-1){
printf("-x^%d",a);//同上,需要负号
}else{
printf("%dx^%d",sum[0],a);//当a不是1和-1是,需要xa^n,例如2a^5
}
//其他数(一次项和常数项除外),并且是从高到低
for(int i=1;i<a-1;i++){
if(sum[i]>0){
if(sum[i]==1){
printf("+x^%d",a-i);//a-i从降幂排列,1的时候不需要+号
}else{
printf("+%dx^%d",sum[i],a-i);//不是1的时候需要+号
}
//等于0时无输出
}else if(sum[i]<0){
if(sum[i]==-1){
printf("-x^%d",a-i);//特殊判断,同上
}else{
printf("%dx^%d",sum[i],a-i);//。。。同上
}
}
}
//一次项,0时不用判断。。。
//需要特判因为最后没有^1
if(sum[a-1]==-1){
printf("x",sum[a-1]);
}else if(sum[a-1]==1){
printf("+x",sum[a-1]);
}else if(sum[a-1]>0){
printf("+%dx",sum[a-1]);
}else if(sum[a-1]<0){
printf("%dx",sum[a-1]);
}
//常数项
if(sum[a]>0){
printf("+%d",sum[a]);
}else if(sum[a]<0){
printf("%d",sum[a]);
}
return 0;
}
。
。
。
。
。
。
写这道题好累啊。。。
祝大家好运
。
。
。
。
。
。
祝我好运