c++多项式加法 链表
发布网友
发布时间:2022-05-16 18:10
我来回答
共5个回答
热心网友
时间:2023-11-15 19:41
N久之前写过这个题,居然被我翻出来了~~仅数组完成,无结构体无类,稍微改下即可~~
#include "iostream"
using namespace std;
#define N 10
void Input(int X[],int Z[],int *n);
void Show(int X[],int Z[],int n);
void Add(int XA[],int ZA[],int nA,int XB[],int ZB[],int nB,int XC[],int ZC[],int *nC);
void Sort(int X[],int Z[],int n);
int main()
{
int HAshu[N]={0};
int HAxishu[N]={0};
int HBshu[N]={0};
int HBxishu[N]={0};
int HCshu[2*N]={0};
int HCxishu[2*N]={0};
int HAn=0,HBn=0,HCn=0;
Input(HAxishu,HAshu,&HAn);
Sort(HAxishu,HAshu,HAn);
Show(HAxishu,HAshu,HAn);
Input(HBxishu,HBshu,&HBn);
Sort(HBxishu,HBshu,HBn);
Show(HBxishu,HBshu,HBn);
Add(HAxishu,HAshu,HAn,HBxishu,HBshu,HBn,HCxishu,HCshu,&HCn);
Sort(HCxishu,HCshu,HCn);
cout<<"\n两个多项式相加为:\n";
Show(HCxishu,HCshu,HCn);
system("pause");
return 0;
}
void Input(int X[],int Z[],int *n)
{
int i,count=0;
cout<<"请输入多项式的(系数 指数),(0 0)为结束:\n";
int xishu,shu;
while(1)
{
cin>>xishu>>shu;
if(shu==0 && xishu==0)
break;
for(i=0;i<count;i++)
{
if(Z[i]==shu)
break;
}
if(i>=count) count++;//如果本来没有存在该指数
Z[i]=shu;
X[i]+=xishu;
if(count>=N)
{
cout<<"输入超过指定项数,自动结束\n";
break;
}
}
*n=count;
cout<<"多项式输入完毕!\n";
}
void Show(int X[],int Z[],int n)
{
for(int i=0;i<n-1;i++)
{
if(X[i]!=0)
cout<<"("<<X[i]<<"X^"<<Z[i]<<") + ";
}
cout<<"("<<X[i]<<"X^"<<Z[i]<<")\n";
}
void Add(int XA[],int ZA[],int nA,int XB[],int ZB[],int nB,int XC[],int ZC[],int *nC)
{
int i,j,count=0;
for(i=0;i<nA;i++)
{
for(j=0;j<count;j++)
{
if(ZC[j]==ZA[i])
break;
}
if(j>=count) count++;//如果本来没有存在该指数
ZC[j]=ZA[i];
XC[j]+=XA[i];
}
for(i=0;i<nB;i++)
{
for(j=0;j<count;j++)
{
if(ZC[j]==ZB[i])
break;
}
if(j>=count) count++;//如果本来没有存在该指数
ZC[j]=ZB[i];
XC[j]+=XB[i];
}
*nC=count;
}
void Sort(int X[],int Z[],int n)
{
int i,j,temp;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(Z[j]<Z[j+1])
{
temp=Z[j];Z[j]=Z[j+1];Z[j+1]=temp;
temp=X[j];X[j]=X[j+1];X[j+1]=temp;
}
}
热心网友
时间:2023-11-15 19:41
#include<iostream>
using
namespace
std;
struct
Multi
{
long
nf;
int
ne;
Multi
*next;
}**add,*sum;
void
input()
{
add=new
Multi*[2];
for(int
n=0;n!=2;n++)add[n]=new
Multi[11];
for(int
i=0;i!=2;i++)
for(int
a=1;;a++)
{
cin>>add[i][a].nf>>add[i][a].ne;add[i][a].next=&add[i][a+1];
if(add[i][a].nf==0
&&
add[i][a].ne==0)
{
if(a==1){add[i][a].next=NULL;break;}
add[i][a-1].next=NULL;break;
}
else
if(a==10)
{
add[i][a].next=NULL;break;
}
}
add[0][0].next=&add[0][1];
add[1][0].next=&add[1][1];
}
void
prt(Multi
*headp)
{
bool
fir=0;
while(headp->next!=NULL)
{
headp=headp->next;
if(headp->nf==0);
else
if(headp->nf<0
||
fir==0){cout<<headp->nf<<"x"<<"^"<<headp->ne;fir=1;}
else
if(headp->nf
>0){cout<<"+"<<headp->nf<<"x"<<"^"<<headp->ne;fir=1;}
}
if(fir==0)cout<<"0";
cout<<endl;
}
void
sort(Multi
*headp)
{
Multi
*pedo=headp;
while(pedo->next!=NULL)
{
Multi
*min=pedo->next,*m=pedo->next,*premin=pedo;
while(m!=NULL
&&
m->next!=NULL
)
{
if(min->ne
>
m->next->ne)
{
premin=m;min=m->next;
}
else
if(min->ne==m->next->ne)
{
min->nf=min->nf+m->next->nf;
m->next=m->next->next;
}
m=m->next;
}
premin->next=min->next;
min->next=pedo->next;
pedo->next=min;
pedo=pedo->next;
}
}
void
addf()
{
int
a;
sum=new
Multi[21];
sum[0].next=∑[1];
Multi
*ad1=&add[0][1],*ad2=&add[1][1];
for(a=1;ad1!=NULL;a++)
{
sum[a].ne=ad1->ne;sum[a].nf=ad1->nf;
ad1=ad1->next;
}
for(;ad2!=NULL;a++)
{
sum[a].ne=ad2->ne;sum[a].nf=ad2->nf;
ad2=ad2->next;
}
for(int
b=1;b!=a;b++)
{
sum[b].next=∑[b+1];
}
sum[a-1].next=NULL;
}
void
go()
{
input();
sort(&add[0][0]);sort(&add[1][0]);
prt(&add[0][0]);prt(&add[1][0]);
addf();
sort(∑[0]);
prt(∑[0]);
for(int
a=0;a!=2;a++)
delete[]
add[a];
delete[]
add;
a=NULL;
delete[]
sum;
sum=NULL;
}
int
main()
{
char
ct='y';
while(ct!='n')
{
go();
cout<<"countinue?"<<endl;
cin>>ct;
}
return
0;
}
注意:
取sum的地址变成了
∑
!
!!
void
sort(Multi
*headp)
排序并相加是相同指数的
void
prt(Multi
*headp)
输出
并去系数为0的
void
input()
输入
并判断输入ne,nf都为0结束
void
addf()
简单相加add[0]和add[1]
到sum
不对相同指数的做处理
void
go()
循环开始
热心网友
时间:2023-11-15 19:42
#include<iostream>
using namespace std;
struct Multi
{
long nf;
int ne;
Multi *next;
}**add,*sum;
void input()
{
add=new Multi*[2];
for(int n=0;n!=2;n++)add[n]=new Multi[11];
for(int i=0;i!=2;i++)
for(int a=1;;a++)
{
cin>>add[i][a].nf>>add[i][a].ne;add[i][a].next=&add[i][a+1];
if(add[i][a].nf==0 && add[i][a].ne==0)
{
if(a==1){add[i][a].next=NULL;break;}
add[i][a-1].next=NULL;break;
}
else if(a==10)
{
add[i][a].next=NULL;break;
}
}
add[0][0].next=&add[0][1];
add[1][0].next=&add[1][1];
}
void prt(Multi *headp)
{
bool fir=0;
while(headp->next!=NULL)
{
headp=headp->next;
if(headp->nf==0);
else if(headp->nf<0 || fir==0){cout<<headp->nf<<"x"<<"^"<<headp->ne;fir=1;}
else if(headp->nf >0){cout<<"+"<<headp->nf<<"x"<<"^"<<headp->ne;fir=1;}
}
if(fir==0)cout<<"0";
cout<<endl;
}
void sort(Multi *headp)
{
Multi *pedo=headp;
while(pedo->next!=NULL)
{
Multi *min=pedo->next,*m=pedo->next,*premin=pedo;
while(m!=NULL && m->next!=NULL )
{
if(min->ne > m->next->ne)
{
premin=m;min=m->next;
}
else if(min->ne==m->next->ne)
{
min->nf=min->nf+m->next->nf;
m->next=m->next->next;
}
m=m->next;
}
premin->next=min->next;
min->next=pedo->next;
pedo->next=min;
pedo=pedo->next;
}
}
void addf()
{
int a;
sum=new Multi[21];
sum[0].next=∑[1];
Multi *ad1=&add[0][1],*ad2=&add[1][1];
for(a=1;ad1!=NULL;a++)
{
sum[a].ne=ad1->ne;sum[a].nf=ad1->nf;
ad1=ad1->next;
}
for(;ad2!=NULL;a++)
{
sum[a].ne=ad2->ne;sum[a].nf=ad2->nf;
ad2=ad2->next;
}
for(int b=1;b!=a;b++)
{
sum[b].next=∑[b+1];
}
sum[a-1].next=NULL;
}
void go()
{
input();
sort(&add[0][0]);sort(&add[1][0]);
prt(&add[0][0]);prt(&add[1][0]);
addf();
sort(∑[0]);
prt(∑[0]);
for(int a=0;a!=2;a++)
delete[] add[a];
delete[] add;
a=NULL;
delete[] sum;
sum=NULL;
}
int main()
{
char ct='y';
while(ct!='n')
{
go();
cout<<"countinue?"<<endl;
cin>>ct;
}
return 0;
}
注意: 取sum的地址变成了 ∑ ! !!
void sort(Multi *headp) 排序并相加是相同指数的
void prt(Multi *headp) 输出 并去系数为0的
void input() 输入 并判断输入ne,nf都为0结束
void addf() 简单相加add[0]和add[1] 到sum 不对相同指数的做处理
void go() 循环开始
热心网友
时间:2023-11-15 19:42
include <iostream>
using namespace std;
int main()
{
int i,j;
for (i=1,j=1;j<=9;j++)
{
i=1;
cout<<i<<"*"<<j<<"="<<i*j<<" ";
for (;i<j;)
{
i++;
cout<<i<<"*"<<j<<"="<<i*j<<" ";
} cout<<endl;
}
return 0;
}
热心网友
时间:2023-11-15 19:43
贴上你的邮箱,我传给你
用C语言实现数据结构的题目:一元多项式相加
如: 1 1 2 2 3 3 0 0 2 2 3 3 0 0 结果:1 1 4 2 6 3 include <stdio.h> include <malloc.h> struct poly //设置结构体 { int xi;int zhi;struct poly *next;};struct poly *jianli(void) //建立链表 { struct poly *p1,*head1,*p2;head1=(struct poly*)malloc(siz...
使用链表完成一个整数计算器,该计算器需包含整数的加法、减法、乘法功...
struct node *next;}PolyNode; //多项式节点 polynomial node 多项式的加法我们提供了两种:1.Polynomial polyAdd(Polynomial poly1, Polynomial poly2),把poly1和poly2相加得到一个新的多项式。相加的过程中poly1和poly2保持不变,不会被破坏。2.void add(Polynomial poly1, Polynomial poly2),把pol...
...个程序用单链表存储多项式,并实现两个多项式相加的函数?
int coef; //多项式系数 int exp; //多项式指数 //初始化项的系数和指数 term( int c=0,int e=0):coef(c),exp(e){} };//定义多项式类 class PolyArith { private:list<term> m_poly_list_first; //存储第一个多项式 list<term> m_poly_list_second; //存储第二个多项...
数据结构要求做个多项式计算器 用C语言 哪位高人有代码谢谢
(1) 用带表头结点的单链表存储多项式;(2) 多项式的每一项为一个结点,数据类型ElemType为结构体,包含两个数据成员:系数和指数;(3) 输入时依次输入多项式每一项的系数和指数,注意结束条件;(4) 输出时注意两项之间加号或减号的处理;(5) 使用Lab2-2实现的单链表ADT基本操作完成本次作业 ; 展开 我来答 2个...
急解一个数据结构的题(C语言)
{ /* 多项式加法:Pa=Pa+Pb,并销毁一元多项式Pb */ Position ha,hb,qa,qb; term a,b; ha=GetHead(*Pa); hb=GetHead(*Pb); /* ha和hb分别指向Pa和Pb的头结点 */ qa=NextPos(ha); qb=NextPos(hb); /* qa和qb分别指向Pa和Pb中当前结点(现为第一个结点) */ while(!ListEmpty(*Pa)&&!List...
c++编程 多项式的乘法
void num(formula *m);//计算多项式的数值void show(formula *m);//显示多项式formula *mul(formula *m,formula *n);//多项式的乘法struct formula{ double a; int i; formula *next;};//链表,用于形成多项式void main(){ system("color 3e"); formula *s1,*s2,*snum;cout<<"程序开始了"<<endl;...
一元多项式加法 程序改错 大虾救命啊!课程设计 要交了
{/*输入m象的系数和指数,建立表示一元多项式的有序链表p*/ polynode *r,*h,e,*c,*c_pre;p=InitList(p);/*初始化线形链表p*/ h=GetHead(p);/*得到头结点*/ r=h;for(int i=1;i<=m;i++){/*依次输入m个非零项*/ cout<<"Coef:";cin>>e.coef;cout<<"Expn:";cin>>e....
一元稀疏多项式计算器 用C语言实现加法,减法,乘法
已经发给你,注意查收