問題描述:
題目描述
一元nnn次多項式可用如下的表達式表示:
f(x)=anxn+an−1xn−1+⋯+a1x+a0,an≠0f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots +a_1x+a_0,a_n\ne 0 f(x)=anxn+an−1xn−1+⋯+a1x+a0,an≠0
其中,aixia_ix^iaixi稱爲iii次項,aia_iai 稱爲iii次項的係數。給出一個一元多項式各項的次數和係數,請按照如下規定的格式要求輸出該多項式:
-
多項式中自變量爲x xx,從左到右按照次數遞減順序給出多項式。
-
多項式中只包含係數不爲000的項。
-
如果多項式nnn次項係數爲正,則多項式開頭不出現“+”號,如果多項式nnn次項係數爲負,則多項式以“-”號開頭。
對於不是最高次的項,以“+”號或者“-”號連接此項與前一項,分別表示此項係數爲正或者係數爲負。緊跟一個正整數,表示此項係數的絕對值(如果一個高於000次的項,其係數的絕對值爲111,則無需輸出 111)。如果xxx的指數大於111,則接下來緊跟的指數部分的形式爲“xbx^bxb”,其中 bb b爲 xx x的指數;如果 xxx的指數爲1 11,則接下來緊跟的指數部分形式爲“xxx”;如果 xxx 的指數爲0 00,則僅需輸出係數即可。
多項式中,多項式的開頭、結尾不含多餘的空格。
輸入格式
輸入共有 222 行
第一行1 11 個整數,nnn,表示一元多項式的次數。
第二行有 n+1n+1 n+1個整數,其中第i i i個整數表示第n−i+1 n-i+1n−i+1 次項的係數,每兩個整數之間用空格隔開。
輸出格式
輸出共 111 行,按題目所述格式輸出多項式。
輸入輸出樣例
輸入 #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
說明/提示
NOIP 2009 普及組 第一題
對於100%數據,0≤n≤1000 \le n \le 1000≤n≤100,−100≤-100 \le −100≤係數≤100 \le 100≤100
基本思路:
各種if else。然而我還是太天真了。。
看了看題解,有大神把所有情況都放在一起考慮。
根據輸出每一項結果各種字符的先後順序,設定if的順序,接着打印。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a;
cin>>n;
for(int i=n;i>=0;i--){
cin>>a;
if(a){ // 判0係數
if(i!=n&&a>0)cout<<"+"; // 根據正負、是否爲最高此項決定加號
if(abs(a)>1||i==0)cout<<a; // 輸出係數(係數不爲正負1或指數爲0)
if(a==-1&&i)cout<<"-"; // -1係數特判,常數項已特判
if(i>1)cout<<"x^"<<i; // 二次及以上輸出指數
if(i==1)cout<<"x"; // 一次項
}
}
}