题目:
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
问题:
代码敲出来了,样例过了。网上找的测试用例也过了,可是PAT上面过不了,PAT上面的测试用例都是答案错误。。。不知道错那里了,请各位大神帮忙看看。
代码在下面
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=1e3+10;
const int minn=-1005;
struct node
{
int cor;
int exp;
node *next;
};
bool flag=false;
int n,lena,lenb,lenc;
node * List1,*List2,*List3;
node CreatNode(node a[]) ///建立结构数组
{
cin>>n;
if(n==0)
{
a[0].cor=0;
a[0].exp=0;
}
for(int i=0; i<n; i++)
{
cin>>a[i].cor;
cin>>a[i].exp;
}
return *a;
}
void print(node c[]) ///打印结构数组
{
if(c[0].cor==0){
flag=true;
}
else cout<<c[0].cor<<" "<<c[0].exp;
for(int i=1; i<=lenc-1; i++)
{
if(c[i].cor!=minn)
{
if(c[i].cor!=0)
cout<<" "<<c[i].cor<<" "<<c[i].exp;
}
}
if(flag==true)
cout<<"0 0";
flag=false;
}
bool cmp(const node & a, const node &b) ///cmp比较
{
return a.exp>b.exp;
}
node UnionNode(node a[],node b[],node d[]) ///将两个结构数组合并成一个大的结构数组
{
int t=0;
for(int i=0; i<lena; i++)
{
d[t].cor=a[i].cor;
d[t].exp=a[i].exp;
t++;
}
for(int i=0; i<lenb; i++)
{
d[t].cor=b[i].cor;
d[t].exp=b[i].exp;
t++;
}
return *d;
}
void add(node c[]) ///将数组a,b的值赋值给c并排好序后,在c中进行加法运算
{
int t=lenc;
for(int i=0; i<t-1; i++)
{
if(c[i].exp==c[i+1].exp)
{
c[i].cor=c[i].cor+c[i+1].cor;
c[i+1].cor=minn;
}
}
}
node mulNode(node a[],node b[],node c[]) ///将两个结构数组相乘的值赋值给第三个结构数组
{
int t=0;
for(int i=0; i<lena; i++)
{
for(int j=0; j<lenb; j++)
{
c[t].cor=a[i].cor*b[j].cor;
c[t].exp=a[i].exp+b[j].exp;
t++;
}
}
return *c;
}
void hh()
{
cout<<endl;
}
int main()
{
node a[maxn],b[maxn],c[maxn],d[maxn];
a[maxn]=CreatNode(a); ///建立第一个结构数组
lena=n;
b[maxn]=CreatNode(b); ///建立第二个结构数组
lenb=n;
lenc=lena*lenb;
c[maxn]=mulNode(a,b,c);
sort(c,c+lenc,cmp);
add(c);
print(c);
hh();
//cout<<endl;
lenc=lena+lenb;
d[maxn]=UnionNode(a,b,d); ///将两个结构数组合并起来为C
sort(d,d+lenc,cmp); ///对C排序
add(d); ///C中的元素相加
print(d);
return 0;
}