此一元多项式错在哪???

hua_zhixing_ 2009-04-12 12:46:01
#include<iostream>
using namespace std;

typedef struct sterm{//项的表示,多项式的项作为polynomial的数据元素
int coef;
int expn;
sterm *next;
}term,*polynomial;

term *creat(int n){//按从头到尾的顺序创建带关结点的单链表存储多项式
term *head,*p,*q;
//int s;
head=(polynomial)malloc(sizeof(term));//先建立一个带头结点的单链表
head->next=NULL;
head->coef=0;
head->expn=-1;
q=head;

for(int i=n;i>0;i--){
p=(polynomial)malloc(sizeof(term));//生成新结点
cin>>p->coef>>p->expn;//输入元素值
q->next=p;
p->next=NULL;
q=p;//插入到表尾
}
return head;
}

void print(polynomial head){//以表达式的形式输出存储在链表中的多项式
term *p;
p=head->next;
cout<<p->coef<<"x^"<<p->expn;
p=p->next;
while(p){
if(p->coef>0)
cout<<"+"<<p->coef<<"x^"<<p->expn;
else
if(p->coef<0)
cout<<p->coef<<"x^"<<p->expn;
p=p->next;
}
cout<<endl;
}

polynomial addpolyn(polynomial f,polynomial g){//实现两个多项式相加
polynomial p,q,pre,u;
int sum;
p=f;//f;
q=g;
pre=f;
while(p!=NULL && q!=NULL){
if(p->expn<q->expn){//p指针所指项的指数小于q指针所指项的指数,p往后移
pre=p; p=p->next;
}
else if(p->expn==q->expn){//p指针所指项的指数等于q指针所指项的指数,相加,
sum=p->coef+q->coef; //并将结果(不为零)存入p指针所指系数域中
if(sum!=0){
p->coef=sum;
pre=p;
}
else{ pre->next=p->next; free(p);}
}
else{//p指针所指项的指数大于q指针所指项的指数,q指针所指项插入到p所指项之前
u=q->next;
q->next=p;
pre->next=q;
pre=q;
q=u;
}
}
if(q!=NULL) pre->next=q;//q指针未到g链表末尾,将其链接到f链表后面
free(g);
return f;
}

polynomial reverse(polynomial l){//实现两个多项式带关结点的单琏表的逆置,
polynomial p,q; //仿照从表尾到表头逆向建立单链表的算法
p=l->next;
l->next=NULL;
while(p){
q=p->next;
p->next=l->next;
l->next=p;
p=q;
}
return l;
}

polynomial multiply(polynomial f,polynomial g){
polynomial h,l,fp,gp,hp,q;//实现两个多项式相乘,将一个多项式按指数从高
int max,k,r; //到低排序,另一个多项式按指数从低到高排序
int c;
max=25;
max=f->expn+g->expn;
h=(term*)malloc(sizeof(term));
h->coef=0;
h->expn=-1;
h->next=NULL;
hp=h;
l=reverse(g);
for(r=max;r>=0;r--){
c=0;
fp=f->next;
gp=l->next;
while(fp&&gp){
k=fp->expn+gp->expn;
if(k>r)
fp=fp->next;
else if(k<r)
gp=gp->next;
else{
c+=fp->coef*gp->coef;
fp=fp->next;
gp=gp->next;
}
}
if(c!=0){
q=(term*)malloc(sizeof(term));
q->expn=r;
q->coef=c;
q->next=hp->next;
hp->next=q;
hp=q;
}
}
return h;
}

int main(){
polynomial e,f,g,h;
int n,m;

cout<<"n=";
cin>>n;
f=creat(n);

cout<<"m=";
cin>>m;
g=creat(m);

e=addpolyn(f,g);
print(e);
f=reverse(f);
h=multiply(f,g);
print(h);

return 1;
}

...全文
81 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
renshangyuan1988 2009-04-13
  • 打赏
  • 举报
回复
比较长,我下去看看,,
hua_zhixing_ 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ryuk33 的回复:]
出了什么错误?
运行的结果不符合预期吗?
[/Quote]
算法错了,估计。
gao125210 2009-04-12
  • 打赏
  • 举报
回复
up
fellatioyzx 2009-04-12
  • 打赏
  • 举报
回复
不想看。。。
wxgiter 2009-04-12
  • 打赏
  • 举报
回复
好长~~~~

什么错了?
ryuk33 2009-04-12
  • 打赏
  • 举报
回复
出了什么错误?
运行的结果不符合预期吗?
  • 打赏
  • 举报
回复
帮顶哦.
liubuweiright 2009-04-12
  • 打赏
  • 举报
回复
帮顶
挺长的,我花了.

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧