1. 程式人生 > 實用技巧 >問題 D: 老師的任務 (poly)【所用演算法:模擬】

問題 D: 老師的任務 (poly)【所用演算法:模擬】

問題 D: 老師的任務 (poly)

時間限制:1Sec記憶體限制:128 MB
提交狀態

題目描述

福州時代中學的老師都十分優秀,他們工作起來非常認真刻苦。為了使自己的工作更加輕鬆一點(老師也有偷懶的時候),我們尊敬的數學老師想實現一個功能:只需輸入一個多項式的項數和各項的係數,就能直接輸出這個多項式。這個功能將會給老師帶來極大的便利。老師找到了優秀的你,讓你來幫忙完成這個任務。

一元 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.多項式中,多項式的開頭、結尾不含多餘的空格。

輸入

輸入共兩行,第一行 1 個整數 n,表示一元多項式的次數。
第二行為 n+1 個整數,其中第 n-i+1 個整數表示第 次項的係數,每兩個整數之間用空格隔開。

輸出

輸出共一行,按題目所述格式輸出多項式。

樣例輸入Copy

【樣例1】
5
100 -1 1 -3 0 10
【樣例2】
3 
-50 0 0 1 

樣例輸出 Copy

【樣例1】
100x^5-x^4+x^3-3x^2+10
【樣例2】
-50x^3+1

提示

對於 100% 資料,0≤n≤100,-100≤係數≤100
#include <cmath>
#include <cstring>
#include <iostream>

using namespace std;

int n, sum, a;

int main(){
    cin >> n;
    for (int i = n; i >= 0; i --){
        int x;
        cin >> x;
        if (i == n){
            if (x == 0) continue;
            else if (x == 1) printf("x^%d", i);
            else if (x == -1) printf("-x^%d", i);
            else if (x > 1) printf("%dx^%d", x, i);
            else printf("%dx^%d", x, i);
        }
        else if (i > 1 && i < n){
            if (sum != 0){
                if (x == 0) continue;
                else if (x == 1) printf("+x^%d", i);
                else if (x == -1) printf("-x^%d", i);
                else if (x > 1) printf("+%dx^%d", x, i);
                else printf("%dx^%d", x, i);
            }
            else{
                if (x == 0) continue;
                else if (x == 1) printf("x^%d", i);
                else if (x == -1) printf("-x^%d", i);
                else if (x > 1) printf("%dx^%d", x, i);
                else printf("%dx^%d", x, i);
            }
        }
        else if (i == 1){
            if (sum != 0){
                if (x == 0) continue;
                else if (x == 1) printf("+x");
                else if (x == -1) printf("-x");
                else if (x > 1) printf("+%dx", x);
                else printf("%dx", x);
            }
            else{
                if (x == 0) continue;
                else if (x == 1) printf("x");
                else if (x == -1) printf("-x");
                else if (x > 1) printf("%dx", x);
                else printf("%dx", x);
            }
        }
        else{
            if (sum != 0){
                if (x == 0) puts("");
                else if (x > 0) printf("+%d\n", x);
                else printf("%d\n", x);
            }
            else{
                if (x == 0) puts("");
                else if (x > 0) printf("%d\n", x);
                else printf("%d\n", x);
            }
        }
        if (sum != 0) continue;
        else sum += x;
    }
    
    return 0;
}