算法提高 多項式輸出
一元n 次多項式可用如下的表達式表示:
f(x)=a[n]xn+a[n-1]x(n-1)+…+a[1]x+a[0], a[n]!=0
其中,a[i]x^i稱爲i 次項, a[i]稱爲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 ≤ n ≤ 100,多項式各次項係數的絕對值均不超過100。
輸出格式:
輸出共1 行,按題目所述格式輸出多項式。
輸入樣例:
在這裏給出一組輸入。例如:
5
100 -1 1 -3 0 10
輸出樣例:
在這裏給出相應的輸出。例如:
100x^5-x^4+x^3-3x^2+10
輸入樣例:
在這裏給出一組輸入。例如:
3
-50 0 0 1
輸出樣例:
在這裏給出相應的輸出。例如:
-50x^3+1
代碼:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n, cnt = 0, mi;//mi就是冪次,cnt用於保證第一個正數前無‘+’
cin >> n;
mi = n;
vector<int>arr(n + 1);//存每一項的係數
for (int i = 0; i < n + 1; i++)
{
cin >> arr[i];
}
for (int i = 0; i < n; i++)
{
if (arr[i] < 0)
{
if (arr[i] != -1)//冪次爲-1不輸出x
cout << arr[i];
else
cout << '-';
cout << "x";
if (mi != 1)
cout <<'^'<< mi;
cnt++;
}
else if (arr[i]>0)
{
if (cnt != 0)
cout << '+';
if (arr[i] != 1)//冪次爲1不輸出x
cout << arr[i];
cout << "x";
if (mi != 1)
cout <<'^'<< mi;
cnt++;
}
mi--;
}
if (arr[n] != 0)
{
if (arr[n] > 0)
cout << '+' << arr[n];
else
cout << arr[n];
}
return 0;
}