【luogu/字符串】多項式輸出(所有情況一起處理)

問題描述:

題目描述

一元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)=an​xn+an−1​xn−1+⋯+a1​x+a0​,an​≠0

其中,aixia_ix^iai​xi稱爲iii次項,aia_iai​ 稱爲iii次項的係數。給出一個一元多項式各項的次數和係數,請按照如下規定的格式要求輸出該多項式:

  1. 多項式中自變量爲x xx,從左到右按照次數遞減順序給出多項式。

  2. 多項式中只包含係數不爲000的項。

  3. 如果多項式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";    // 一次項
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章