2009 junior T1 多项式输出 题解

题目描述

一元 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; 
} 







写这道题好累啊。。。
祝大家好运






祝我好运

猜你喜欢

转载自blog.csdn.net/johnwayne0317/article/details/84453987