DS線性表—多項式相加
阿新 • • 發佈:2018-11-09
題目描述
對於一元多項式 p(x)=p0+p1x+p2x2+ … +pnxn ,每個項都有係數和指數兩部分,例如p2x2的係數為p2,指數為2。
程式設計實現兩個多項式的相加。
例如5+x+2x2+3x3,-5-x+6x2+4x4,兩者相加結果:8x2+3x3+4x4
其中係數5和-5都是x的0次方的係數,相加後為0,所以不顯示。x的1次方同理不顯示。
可用順序表或單鏈表實現。
輸入
第1行:輸入t表示有t組測試資料
第2行:輸入n表示有第1組的第1個多項式包含n個項
第3行:輸入第一項的係數和指數,以此類推輸入n行
接著輸入m表示第1組的第2個多項式包含m項
同理輸入第2個多項式的m個項的係數和指數
參考上面輸入第2組資料,以此類推輸入t組
假設所有資料都是整數
輸出
對於每1組資料,先用兩行輸出兩個原來的多項式,再用一行輸出運算結果,不必考慮結果全為0的情況
輸出格式參考樣本資料,格式要求包括:
1.如果指數或係數是負數,用小括號括起來。
2.如果係數為0,則該項不用輸出。
3.如果指數不為0,則用符號^表示,例如x的3次方,表示為x^3。
4.多項式的每個項之間用符號+連線,每個+兩邊加1個空格隔開。
樣例輸入
2 4 5 0 1 1 2 2 3 3 4 -5 0 -1 1 6 2 4 4 3 -3 0 -5 1 2 2 4 9 -1 2 0 3 1 -2 2
樣例輸出
5 + 1x^1 + 2x^2 + 3x^3 (-5) + (-1)x^1 + 6x^2 + 4x^4 8x^2 + 3x^3 + 4x^4 (-3) + (-5)x^1 + 2x^2 9x^(-1) + 2 + 3x^1 + (-2)x^2 9x^(-1) + (-1) + (-2)x^1
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#define ok 0
#define error -1
using namespace std;
void outint(int n){cout<<n<<" ";}
int main()
{
vector<int> v(1000,0),v1(1000,0);
int n,n1,n2;
int flag=1;
cin>>n;
while(n>0){
flag=1;
v=v1=vector<int>(1000,0);
cin>>n1;
int t1,t2;
for(int i=0;i<n1;i++)
{
cin>>t1>>t2;
v[500+t2]=t1;
}
for(int i=0;i<1000;i++)
{
if(v[i]==0)
continue;
else
{
if(flag==1)
flag=0;
else
cout<<" + ";
if(i==500){
if(v[500]>0)
{cout<<v[500];}
else
cout<<"("<<v[500]<<")";
}
if(i<500){
if(v[i]>0)
{cout<<v[i]<<"x^("<<(i-500)<<")";}
else
cout<<"("<<v[i]<<")"<<"x^("<<(i-500)<<")";
}
if(i>500){
if(v[i]>0)
{cout<<v[i]<<"x^"<<i-500;}
else
cout<<"("<<v[i]<<")"<<"x^"<<i-500;
}
}
}
cout<<endl;
cin>>n2;
flag=1;
for(int i=0;i<n2;i++)
{
cin>>t1>>t2;
v1[500+t2]=t1;
}
for(int i=0;i<1000;i++)
{
if(v1[i]==0)
continue;
else
{
if(flag==1)
flag=0;
else
cout<<" + ";
if(i==500){
if(v1[500]>0)
{cout<<v1[500];}
else
cout<<"("<<v1[500]<<")";
}
if(i<500){
if(v1[i]>0)
{cout<<v1[i]<<"x^("<<(i-500)<<")";}
else
cout<<"("<<v1[i]<<")"<<"x^("<<(i-500)<<")";
}
if(i>500){
if(v1[i]>0)
{cout<<v1[i]<<"x^"<<i-500;}
else
cout<<"("<<v1[i]<<")"<<"x^"<<i-500;
}
}
}
cout<<endl;
for(int i=0;i<1000;i++)
{
v[i]+=v1[i];
}
flag=1;
for(int i=0;i<1000;i++)
{
if(v[i]==0)
continue;
else
{
if(flag==1)
flag=0;
else
cout<<" + ";
if(i==500){
if(v[500]>0)
{cout<<v[500];}
else
cout<<"("<<v[500]<<")";
}
if(i<500){
if(v[i]>0)
{cout<<v[i]<<"x^("<<(i-500)<<")";}
else
cout<<"("<<v[i]<<")"<<"x^("<<(i-500)<<")";
}
if(i>500){
if(v[i]>0)
{cout<<v[i]<<"x^"<<i-500;}
else
cout<<"("<<v[i]<<")"<<"x^"<<i-500;
}
}
}
cout<<endl;
n--;
}
}