问题描述:多项式A,B幂递减,计算两个多项式相加的结果,幂递减输出。
解题思路:用链表进行存储,逐一比对,幂谁大输出谁,幂相等,系数运算后判断是否为0,不为0则输出,最后将剩余的链表直接输出即可。
AC代码:
/*
**1002 A+B for Polynomials (25 分)----------------25
**多项式相加,#1类似于归并,可以用链表(最好),数组(有删减需移动元素);
**#2可以开一个2000的数组,下标作指数,值作系数,遍历一遍即可(或者再建一个数组存结果指数)
*/
#include<iostream>
#include<list>
#include<iomanip>
using namespace std;
typedef struct polynomial{
int exponent;
double coefficient;
}poly;
int main()
{
list<poly>L; int K; poly a;
//freopen("test.txt","r",stdin);
scanf("%d",&K);
while(K){
scanf("%d %lf",&a.exponent,&a.coefficient);
L.push_back(a);
--K;
}
list<poly>::iterator i=L.begin();
cin>>K;
while(K){
cin>>a.exponent>>a.coefficient;
while(a.exponent<(*i).exponent&&i!=L.end()){ //输入的指数小于链表的元素指数
++i;
}
if(i==L.end())L.insert(i,a);
else{
if(a.exponent>(*i).exponent){
L.insert(i,a);
//++i; //insert会自动指向下一个。 相当于插在前面,自己指针未变。
}
else if(a.exponent==(*i).exponent){
if(a.coefficient+(*i).coefficient)(*i).coefficient+=a.coefficient; //结果为0,删除
else i=L.erase(i);
}
}
--K;
}
cout<<L.size(); //第六的测试点,两个相加可能最后为0,但要输出
i=L.begin();
for(;i!=L.end();++i){
printf(" %d %0.1lf",(*i).exponent,(*i).coefficient);
}
return 0;
}