一元稀疏多项式相加
2016-10-07 10:49
309 查看
#include<cstdio> #include<cstdlib> using namespace std; typedef struct { int ceof; int expn; }Poly; typedef struct Polynode { Poly data; struct Polynode *next; }Polynode,*Polylink; void Addpoly(Poly *A,int n,Poly *B,int m,Polylink& C) { int i=0,j=0; Polylink p,pc; C=pc=(Polylink)malloc(sizeof(Poly)); while(i<n&&j<m) { if(A[i].expn<B[j].expn) { p=(Polylink)malloc(sizeof(Polylink)); p->data.ceof=A[i].ceof; p->data.expn=A[i].expn; pc->next=p; pc=p; i++; } else if(A[i].expn>B[j].expn)//else { p=(Polylink)malloc(sizeof(Polylink)); p->data.ceof=B[j].ceof; p->data.expn=B[j].expn; pc->next=p; pc=p; j++; } else { if(A[i].ceof+B[j].ceof!=0.0) { p=(Polylink)malloc(sizeof(Polylink)); p->data.ceof=A[i].ceof+B[j].ceof; p->data.expn=A[i].expn; pc->next=p; pc=p; } i++; j++; } } while(i<n) { p=(Polylink)malloc(sizeof(Polylink)); p->data.ceof=A[i].ceof; p->data.expn=A[i].expn; pc->next=p; pc=p; i++; } while(j<m) { p=(Polylink)malloc(sizeof(Polylink)); p->data.ceof=B[j].ceof; p->data.expn=B[j].expn; pc->next=p; pc=p; j++; } pc->next=NULL;// } void print(Polylink C) { Polylink p; p=C->next; if(p==NULL) { printf("0"); return; } while(p) { if(p->data.ceof>1||p->data.ceof<-1) printf("%d",p->data.ceof); if(p->data.expn==0&&(p->data.ceof==1||p->data.ceof==-1)) printf("%d",p->data.ceof); else if(p->data.expn!=0&&p->data.ceof==-1) printf("-"); if(p->data.expn==1) printf("x"); else if(p->data.expn>1) printf("x^%d",p->data.expn); if(p->next&&(p->next->data.ceof>0)) printf("+"); p=p->next; } } int main() { int n,m; printf("\t\t\t\t\t **********************\n"); printf("\t\t\t\t\t * 一元稀疏多项式相加 *\n"); printf("\t\t\t\t\t **********************\n"); printf("请输入相加项数:输入0 0则结束运算\n"); while(scanf("%d%d",&n,&m),n,m) { Poly *A,*B; A=(Poly*)malloc(n*sizeof(Poly)); B=(Poly*)malloc(m*sizeof(Poly)); Polylink C,pc; printf("请输入A各项系数和指数:\n"); for(int i=0;i<n;i++) scanf("%d%d",&A[i].ceof,&A[i].expn); printf("请输入B各项系数和指数:\n"); for(int i=0;i<m;i++) scanf("%d%d",&B[i].ceof,&B[i].expn); Addpoly(A,n,B,m,C); print(C); free(A); free(B); pc=C; while(C) { C=C->next; free(pc); pc=C; } printf("\n\n请输入相加项数:输入0 0则结束运算\n"); } return 0; }
相关文章推荐
- 用链表实现一元稀疏多项式的相加
- 一元多项式的表示及相加
- 利用单链表实现一元多项式的表示及相加
- 一元N次多项式的表示及相加
- c++实现一元稀疏多项式加减
- 数据结构 - 一元多项式相加减(C语言)
- pat(A) 1002. A+B for Polynomials (一元多项式的表示及相加)
- 数据结构 一元多项式的创建、显示、相加、相减、相乘
- 数据结构 一元多项式相加
- 重学数据结构001――链表基本操作与一元多项式相加
- 一元稀疏多项式计算器
- 一元多项式的表示及相加
- 一元多项式相加
- 数据结构:一元多项式相加和相减
- 一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作
- 一元多项式相加-链表应用
- 用单链表实现一元多项式相加 C++代码
- 实验2 一元多项式相加
- 两个一元多项式相加
- 一元多项式表示相加操作