..
题目描述
一元nn次多项式可用如下的表达式表示:
f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots +a_1x+a_0,a_n\ne 0f(x)=anxn+an−1xn−1+⋯+a1x+a0,an≠0
其中,a_ix^iaixi称为ii次项,a_iai 称为ii次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:
-
多项式中自变量为xx,从左到右按照次数递减顺序给出多项式。
-
多项式中只包含系数不为00的项。
-
如果多项式nn次项系数为正,则多项式开头不出现“+”号,如果多项式nn次项系数为负,则多项式以“-”号开头。
-
对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于00次的项,其系数的绝对值为11,则无需输出 11)。如果xx的指数大于11,则接下来紧跟的指数部分的形式为“x^bxb”,其中 bb为 xx的指数;如果 xx的指数为11,则接下来紧跟的指数部分形式为“xx”;如果 xx 的指数为00,则仅需输出系数即可。
-
多项式中,多项式的开头、结尾不含多余的空格。
输入输出格式
输入格式:
输入共有 22 行
第一行11 个整数,nn,表示一元多项式的次数。
第二行有 n+1n+1个整数,其中第ii个整数表示第n-i+1n−i+1 次项的系数,每两个整数之间用空格隔开。
输出格式:
输出共 11 行,按题目所述格式输出多项式。
输入输出样例
5 100 -1 1 -3 0 10
100x^5-x^4+x^3-3x^2+10
3 -50 0 0 1
-50x^3+1
说明
NOIP 2009 普及组 第一题
对于100%数据,0 \le n \le 1000≤n≤100,-100 \le−100≤系数\le 100≤100
..
题解:这题真是口区心心。。。
一开始以为很简单。后来从50->40--40--40分,最后一口气AC了.
自己敲几个 01 01 11 00之类的数据调试即可。
看了题解说倒数第二项因为是一次方所以才知道要特殊处理orz
而且,更坑的是,它未必就一定是 第一项最高次没有符号,而是第一次出现的那一项没有加号,所以用nosign变量记录是否出现了第一个项,同时如果全是零,也要特判输出0.
1 #include <iostream> 2 #include <algorithm> 3 #include <cmath> 4 #include <stdio.h> 5 #include <cstring> 6 #include <string> 7 #include <cstdlib> 8 #include <queue> 9 #include <stack> 10 #include <set> 11 #include <vector> 12 #include <map> 13 #include <list> 14 #include <iomanip> 15 #define maxn 10000 16 //#include <> 17 using namespace std; 18 int main() 19 { 20 int n,x,sign=0,nosign=0; 21 int last=0; 22 scanf("%d",&n); 23 for(int i=n;i>=0;i--) 24 { 25 nosign=0; 26 scanf("%d",&x); 27 if(i==n) 28 last=x; 29 else{ 30 if(last==0) 31 nosign=1; 32 last=1; 33 } 34 if(x==0) 35 { 36 sign++; 37 continue; 38 } 39 //头部:没有头符号,直接输出x和几次方 40 if(i==n){ 41 if(x==1||x==-1) 42 { 43 if(x<0) 44 printf("-"); 45 printf("x^%d",i); 46 } 47 else{ 48 printf("%dx^%d",x,i); 49 } 50 51 } 52 //倒数第二项 53 else if(i==1) 54 { 55 if(x==1||x==-1) 56 { 57 if(x<0&&!nosign) 58 printf("-"); 59 else if(x>0&&!nosign){ 60 printf("+"); 61 } 62 printf("x"); 63 } 64 else{ 65 if(x>0&&!nosign) 66 printf("+"); 67 printf("%dx",x); 68 } 69 }
//中部 70 else if(i!=0){ 71 if(x>0&&!nosign) 72 printf("+"); 73 if(x==1||x==-1) 74 { 75 if(x<0) 76 printf("-"); 77 printf("x^%d",i); 78 } 79 else{ 80 printf("%dx^%d",x,i); 81 } 82 83 } 84 //尾部:输出x。 85 else{ 86 if(x>0&&!nosign) 87 printf("+"); 88 printf("%d",x); 89 } 90 } 91 if(sign==n) 92 cout<<"0"; 93 printf("\n"); 94 return 0; 95 }