java一元多项式减法运算_一元多项式的表示及加减乘除运算
比如:怎样实现用线性链表表示多项式的加法运算?
依据一元多项式相加的运算规则:对于两个一元多项式中全部指数同样的项。相应系数相加,若其和不为零,则构成“和多项式”中的一项。对于两个一元多项式中全部指数不同样的项,则分别复抄到“和多项式”中去。
#include
#include
#include
typedef struct polyn
{
float coef;
int expn;
struct polyn* next;
}PolyNode,*PLinkList;
PLinkList CreatePolyn();//创建一元多项式,使一元多项式呈指数递减
void OutPut(PLinkList head);//输出一元多项式
PLinkList Addition(PLinkList L1,PLinkList L2);//多项式的加法
PLinkList Subtraction(PLinkList L1,PLinkList L2);//多项式的减法
PLinkList Reverse(PLinkList head);//将生成的链表逆置。使一元多项式呈指数递增形式
PLinkList MultiplyPolyn(PLinkList L1,PLinkList L2);//多项式的乘法
#include "test.h"
PLinkList CreatePolyn()//创建一元多项式。使一元多项式呈指数递减
{
PolyNode *p,*q,*s;
PolyNode *head = NULL;
int expn2;
float coef2;
head = (PLinkList)malloc(sizeof(PolyNode));//动态生成头结点
if(!head)
{
return NULL;
}
head->coef = 0.0;//初始化
head->expn = 0;
head->next = NULL;
do
{
printf("输入系数coef(系数和指数都为0结束)");
scanf("%f",&coef2);
printf("输入指数数exp(系数和指数都为0结束)");
scanf("%d",&expn2);
if((long)coef2 == 0 && expn2 == 0)
{
break;
}
s = (PLinkList)malloc(sizeof(PolyNode));
if(!s)
{
return NULL;
}
s->expn = expn2;
s->coef = coef2;
q = head->next ;
p = head;
while(q && expn2 < q->expn)
{
p = q;
q = q->next ;
}
if(q == NULL || expn2 > q->expn)
{
p->next = s;
s->next = q;
}
else
{
q->coef += coef2;
}
}while(1);
return head;
}
void OutPut(PLinkList head)//输出一元多项式
{
PolyNode *p = head->next ;
while(p)
{
printf("%1.1f",p->coef);
if(p->expn)
{
printf("*x^%d",p->expn);
}
if(p->next && p->next->coef > 0)
{
printf("+");
}
p = p->next ;
}
}
PolyNode *Addition(PLinkList L1,PLinkList L2)//多项式的加法
{
PolyNode *pa,*pb,*pc,*u,*head;
head = (PLinkList)malloc(sizeof(PolyNode));
if(!head)
{
return NULL;
}
head->coef = 0.0;
head->expn = 0;
head->next = NULL;
pc = head;
L2 = Reverse(L2);
pa = L1->next ;
pb = L2->next ;
while(pa != NULL && pb != NULL)
{
if(pa->expn == pb->expn)
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pa->coef + pb->coef ;
u->expn = pa->expn ;
pa = pa->next ;
pb = pb->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
else if(pa->expn > pb->expn)
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pa->coef ;
u->expn = pa->expn ;
pa = pa->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
else
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pb->coef ;
u->expn = pb->expn ;
pb = pb->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
}
L2 = Reverse(L2);
return head;
}
PolyNode *Subtraction(PLinkList L1,PLinkList L2)//多项式的减法
{
PolyNode *pa,*pb,*pc,*u,*head;
head = (PLinkList)malloc(sizeof(PolyNode));
if(!head)
{
return NULL;
}
head->coef = 0.0;
head->expn = 0;
head->next = NULL;
pc = head;
pa = L1->next ;
pb = L2->next ;
while(pa != NULL && pb != NULL)
{
if(pa->expn == pb->expn)
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pa->coef - pb->coef ;
u->expn = pa->expn ;
pa = pa->next ;
pb = pb->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
else if(pa->expn > pb->expn)
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pa->coef ;
u->expn = pa->expn ;
pa = pa->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
else
{
u = (PLinkList)malloc(sizeof(PolyNode));
if(!u)
{
return NULL;
}
u->coef = pb->coef ;
u->expn = pb->expn ;
pb = pb->next ;
u->next = pc->next ;
pc->next = u;
pc = u;
}
}
return head;
}
PolyNode *Reverse(PLinkList head)//将生成的链表逆置,使一元多项式呈指数递增形式
{
PolyNode *q,*r,*p = NULL;
q = head->next ;
while(q)
{
r = q->next ;
q->next = p;
p = q;
q = r;
}
head->next = p;
return head;
}
PolyNode *MultiplyPolyn(PLinkList L1,PLinkList L2)//多项式的乘法
{
PolyNode *pa,*pb,*pc,*u,*head;
int k,maxExp;
float coef;
head = (PLinkList)malloc(sizeof(PolyNode));
if(!head)
{
return NULL;
}
head->coef = 0.0;
head->expn = 0;
head->next = NULL;
if(L1->next != NULL && L2->next != NULL)
{
maxExp = L1->next->expn +L2->next->expn ;
}
else
{
return head;
}
pc = head;
L2 = Reverse(L2);
for(k = maxExp;k >= 0;k--)
{
pa = L1->next ;
while(pa != NULL && pa->expn > k)
{
pa = pa->next ;
}
pb = L2->next ;
while(pb != NULL && pa != NULL && pa->expn+pb->expn < k)
{
pb= pb->next ;
}
coef = 0.0;
while(pa != NULL && pb != NULL)
{
if(pa->expn +pb->expn == k)
{
coef += pa->coef *pb->coef ;
pa = pa->next ;
pb = pb->next ;
}
else if(pa->expn +pb->expn > k)
{
pa = pa->next ;
}
else
{
pb = pb->next ;
}
}
if(coef != 0.0)
{
u = (PLinkList)malloc(sizeof(PolyNode));
u->coef = coef;
u->expn = k;
u->next = pc->next ;
pc->next = u;
pc = u;
}
}
L2 = Reverse(L2);
return head;
}
#include "test.h"
int main(void)
{
PLinkList A,B,C,D,E;
A = CreatePolyn();
printf("A(x) =");
OutPut(A);
printf("\n");
B = CreatePolyn();
printf("B(x) =");
OutPut(B);
printf("\n");
C = MultiplyPolyn(A,B);
printf("C(x) = A(x)*B(x) =");
OutPut(C);
printf("\n");
D = Addition(A,B);
printf("D(x) = A(x)+B(x) =");
OutPut(D);
printf("\n");
E = Subtraction(A,B);
printf("E(x) = A(x)-B(x) =");
OutPut(E);
printf("\n");
return 0;
}
java一元多项式减法运算_一元多项式的表示及加减乘除运算相关推荐
- java一元多项式减法运算_一元多项式的加/减法运算
第一行:多项式A的第一项的系数.指数(以空格分隔) 第一行:多项式A的第二项的系数.指数(以空格分隔) ... 第n行:多项式A的第n项的系数.指数(以空格分隔) (假设多项式A的项数为n) (空行) ...
- java实现一元多项式减法_一元多项式 加法 减法 乘法
1 #include 2 #include 3 //系数 coefficient,coef4 //指数 exponent, expon 5 typedef struct polyNode*polyno ...
- java 乘法 位移_用移位实现乘除法运算
用移位实现乘除法运算 a=a*4; b=b/4; 可以改为: a=a<<2; b=b>>2; 说明: 除2 = 右移1位 乘2 = 左移1位 除4 ...
- java中Bigdecimal加减乘除运算
在java中的Bigdecimal类型的数据进行加减乘除运算的时候要调用以下方法: 加法:add 减法:subtract 乘法:multiply 除法:divide 例如: BigDecimal i ...
- JVM - 结合代码示例彻底搞懂Java内存区域_对象在堆-栈-方法区(元空间)之间的关系
文章目录 Pre 示例demo 总体关系 代码示例论证 反汇编 Pre JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器 中我们探讨了线程栈中的内部结构 ,大家 ...
- 一元多项式计算器 :加、减、乘运算【完整代码+运行截图+实验说明】
原文链接 :https://blog.csdn.net/weixin_44119881/article/details/103717231 注意 [ 此套代码,有所缺陷 !!! ] 目 录 1.实 ...
- 数据结构之链表创建一元多项式,求一元多项式之和
数据结构之链表创建一元多项式,求一元多项式之和 前言 对于一元多项式,我们完全可以利用线性表P(a0,a1,a2,-,an)表示,这样的线性表在求两个多项式相加等操作时确实简单,但是多于如下的多项式: ...
- Java计算时间差_传统的SimpleDateFormat类
Java计算时间差_传统的SimpleDateFormat类 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd ...
- JAVA异常使用_每个人都曾用过、但未必都用得好
JAVA异常使用_每个人都曾用过.但未必都用得好 一.抛出异常 vs. 返回错误代码 有人说"Well, an exception is a goto.",但也有人言"m ...
最新文章
- C++ 检测内存泄露
- web第一节2020.5.11
- pip通过阿里源安装
- 让PHP支持页面后退的两种方法
- Node js npm 包管理工具的基本使用
- __property 关键字的使用
- 如何在 Linux 上检查可用磁盘空间 [终端和 GUI]
- iOS开发之runtime的运用-获取当前网络状态
- 学校计算机基础考试教学,计算机基础大一考试题 浅谈中等职业学校计算机基础课程教学设计原则...
- OpenWrt搭建KMS服务(Vlmcsd)
- 如何申请免费的腾讯企业邮箱
- 测试空间大数据软件(Hadoop + HBase + GeoWave + GeoServer)
- 在python培训价格
- js 数组扁平化和树之间相互转换
- 惠普暗夜精灵2怎么打开后盖_散热为何如此优秀?HP暗影精灵II代拆解
- Python - 删除print()中的空格
- 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
- 练习题 William's Colored Pencils
- oracle bloom过滤,[20180112]11g关闭bloom filter.txt
- Yii整合商城经典教学视频(59视频)