续多项式加法

上次用链表写的,提交不对,这次改用数组写,还是提交不对,真心要疯了!

请高手指点!!

#include <iostream>
using namespace std;


void sortexpn(int p[])
{
int i,j,len = p[0];
for (i=2;i<=2*len;i=i+2)
for (j = 2; j <= 2*len - i; )
{
if (p[j] == p[j+2])
{
p[j-1] += p[j+1];
for (int k = j+3;k<=2*len;k++)
p[k-2] = p[k];
len--;
}
else if (p[j] < p[j+2])
{
int tmp1 = p[j];
p[j] = p[j+2];
p[j+2] = tmp1;
int tmp2 = p[j-1];
p[j-1] = p[j+1];
p[j+1] = tmp2;
j=j+2;
}
else
{
j = j+2;
}
}
p[0] = len;
}


void addpoly(int p1[],int p2[],int p3[])
{
int len1 = p1[0], len2 = p2[0],len3 = 0;
int i = 2,j = 2, k = 1;
while (i <= 2*len1 && j <= 2*len2)
{
if (p1[i] == p2[j])
{
int temp = p1[i-1]+p2[j-1];
if (temp != 0)
{
p3[k] = temp;
p3[k+1] = p1[i];
i = i+2;
j = j+2;
k = k+2;
len3++;
}
else
{
i = i+2;
j = j+2;
}
}
else if (p1[i] > p2[j]) 
{
p3[k] = p1[i-1];
p3[k+1] = p1[i];
i = i+2;
k = k+2;
len3++;
}
else
{
p3[k] = p2[j -1];
p3[k+1] = p2[j];
j = j+2;
k = k+2;
len3++;
}
}


if (i<=2*len1)
{
for (; i<=2*len1;i = i+2)
{
p3[k] = p1[i-1];
p3[k+1] = p1[i];
k = k+2;
len3++;
}
}


if (j<=2*len2)
{
for (;j<=2*len2;j=j+2)
{
p3[k] = p2[j -1];
p3[k+1] = p2[j];
k = k+2;
len3++;
}
}


p3[0] = len3;


}




int main()
{
int poly[200][300];
int n,i,j;
cin>>n;


for(i=0;i<2*n;i++)
{
j=1;
int len=0;
int coef,expn;
cin>>coef>>expn;
while(expn >= 0)
{
poly[i][j] = coef;
poly[i][j+1] = expn;
j += 2;
len++;
cin>>coef>>expn;
}
poly[i][0] = len;
} 


for (i = 0; i<2*n;i = i+2)
{

sortexpn (*(poly+i));


sortexpn(*(poly+i+1));

int tmp[300];
addpoly(*(poly+i),*(poly+i+1),tmp);

for (int k=1;k <= 2*tmp[0];k=k+2)
cout<<"["<<tmp[k]<<" "<<tmp[k+1]<<"] ";
cout<<endl; 
}


return 0; 

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值