多项式乘法

article/2025/8/15 4:16:57

实验题目:多项式乘法问题

实验内容与要求 一元稀疏多项式简单计算器的基本功能是:
(1)输入并建立多项式。;
(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
(3)多项式a与多项式b相乘,建立多项式。
代码运行截图:
说明:
1.截图中执行的是2操作,即多项式相乘操作(默认两个多项式相乘)
2.先输入第一个多项式的项数3,接着按照提示输入3个单项式的系数和指数,即输入
1x2+ 2x3+3x4
3.输入第二项多项式的项数2,然后输入2个单项式,即
1x2+2x1
4.两个多项式相乘结果为(1x4+ 2x3+2x5+4x4+3x6+6x5
5.合并同类项后按照降幂顺序输出结果:
3x6+8x5+5x4+2x3
在这里插入图片描述
代码如下:

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Multi)
struct Multi {//系数int ci;//指数int ei;struct Multi* next;
};
char Q;
int Mlen;//输入多项式的项数
int Total;//多项式合并后项数
int main()
{	struct Multi* head;int getLen();int len;void sort(struct Multi* head,int len);void output(struct Multi* head,int Mlen);struct Multi* establish();struct Multi* multiply(struct Multi* heada, struct Multi* headb, int len1, int len2);struct Multi* head1, * head2,*Head;int len1, len2;printf("请输入操作类型:1.建立多项式并输出;2.多项式相乘;0.退出\n");Q = getchar();while (1){if (Q == '0')return 0;else if (Q == '1'){head = establish();printf("\n****************分界线*******************\n");sort(head, Mlen);output(head,Mlen);printf("\n");printf("请输入操作类型:1.建立多项式并输出;2.多项式相乘;0.退出\n");}else if (Q == '2'){head1 = establish();len1 = Mlen;head2 = establish();len2 = Mlen;Head = multiply(head1, head2, len1, len2);sort(Head, Total);printf("****************************************\n");output(Head,Mlen);printf("\n");printf("请输入操作类型:1.建立多项式并输出;2.多项式相乘;0.退出\n");}Q = getchar();}return 0;
}
//接收多项式项数
int getLen()
{int len;printf("请输入多项式的项数:\n");scanf_s("%d", &len);return len;
}
//建立多项式函数
struct Multi* establish()
{int n=0;int k=1,l=0;Mlen = getLen();struct Multi* head;struct Multi* p1, *p2;struct Multi* q1, q2;p1 = p2 = (struct Multi*)malloc(LEN);head = p1;//输入printf("请输入第1项的系数和指数:\n");scanf_s("%d%d", &p1->ci, &p1->ei);int i = 2;while (k < Mlen){n=n+1;k++;if (n == 1)head = p1;else p2->next = p1;p2 = p1;p1 = (struct Multi*)malloc(LEN);printf("请输入第%d项的系数和指数:\n", i);i++;scanf_s("%d%d", &p1->ci, &p1->ei);}p2->next = p1;p1->next= NULL;return head;
}
//排序函数
void sort(struct Multi* head, int len)
{int m, n;for (int i = 0; i < len - 1; i++){struct Multi* cur = head;for (int j = 0; j < len - 1 - i; j++){if (cur->ei < cur->next->ei){m = cur->ei;cur->ei = cur->next->ei;cur->next->ei = m;//n = cur->ci;cur->ci = cur->next->ci;cur->next->ci = n;}cur = cur->next;}}
}
//输出函数
void output(struct Multi* head,int n)
{while (head!=NULL){printf("%dx^%d^", head->ci, head->ei);head = head->next;	if(head!=NULL&&head->ci>=0)printf("+");}
}
//多项式相乘函数,返回值为头指针
struct Multi* multiply(struct Multi* heada, struct Multi* headb, int len1, int len2)//链表a的头指针,链表b的头指针,链表a的长度,链表b的长度
{struct Multi* p1, * p2, * tail;struct Multi* q1, * q2;q1 = heada;q2 = headb;struct Multi* head;//目标指针struct Multi* object;//目标链表头指针struct Multi* Mhead;int n = 0;p1 = p2 = (struct Multi*)malloc(LEN);head = NULL;for (; q1 != NULL; q1 = q1->next){for (; q2 != NULL; q2 = q2->next){p1->ei = q1->ei + q2->ei;p1->ci = q1->ci * q2->ci;n++;if (n == 1)head = p1;elsep2->next = p1;p2 = p1;p1 = (struct Multi*)malloc(LEN);}q2 = headb;}p1 = NULL;p2->next = p1;//合并同类项tail = head;Mhead = head;Total = len1 * len2;for (p1 = head; p1 != NULL; p1 = p1->next){tail = p1;for (p2 = p1->next; p2 != NULL;){if (p2 != NULL && p1->ei == p2->ei){p1->ci = p1->ci + p2->ci;p2 = tail->next;tail->next = p2->next;free(p2);//删除结点Total--;p2 = tail->next;}else{tail = p2;p2 = p2->next;}}}tail = NULL;return Mhead;
}

有什么不足的地方欢迎大家指出(ε≡٩(๑>₃<)۶ 一心向学)


http://chatgpt.dhexx.cn/article/Ni2CsCTg.shtml

相关文章

多项式乘法运算终极版

在上一篇文章中 http://blog.csdn.net/acdreamers/article/details/39005227 介绍了用快速傅里叶变 换来求多项式的乘法。可以发现它是利用了单位复根的特殊性质&#xff0c;大大减少了运算&#xff0c;但是这种做法是对复数系数的矩阵 加以处理&#xff0c;每个复数系数的实…

多项式乘法(FFT)

1 前言 作为一名OI选手&#xff0c;至今未写过fft相关的博客&#xff0c;真是一大遗憾&#xff0c;这也导致我并没有真正推过fft的所有式子 这一篇fft的博客我将详细介绍多项式乘法&#xff0c;易于理解&#xff0c;主要是为了等我啥时候忘了回来看&#xff0c;当然&#xff0…

分治算法-03多项式乘法问题

多项式乘法 简介 多项式的运算表示是一个很常见的算法问题。 问题描述 给予两个多项式A(x)与B(x)&#xff0c;得出C(x)A(x)B(x)。例如&#xff0c;A(x)32x3x24x3&#xff0c;B(x)2x2&#xff0c;C(x)64x9x210x33x44x^5。 问题分析 一般情况下&#xff0c;使用系数表示多项式&a…

【数据结构】——多项式乘法

题目要求 从字符文件输入两个多项式的非零系数及对应的指数&#xff0c;建立多项式的链式存储结构&#xff0c;计算这两个多项式的乘积&#xff0c;输出乘积多项式的全部非零系数及对应的指数到另一字符文件中。 算法原理 两个多项式的乘法&#xff0c;可以借助两个多项式的…

多项式乘法(FFT)详解

本文只探讨多项式乘法(FFT)在信息学中的应用 如有错误或不明欢迎指出或提问&#xff0c;在此不胜感激 多项式 1. 系数表示法 一般应用最广泛的表示方式 用A(x)表示一个x-1次多项式&#xff0c;a[i]为 xi x i 的系数&#xff0c;则A(x) ∑n−10 ∑ 0 n − 1 a[i] * xi x i…

2.2 多项式乘法与加法运算(线性结构,C)

多项式乘法与加法运算 设计函数分别求两个一元多项式的乘积与和题意理解题意理解和积 求解思路多项式表示两种表示方式在事先已经知道具体多少项的时候&#xff0c;本题较好的实现方法&#xff1a;动态数组链表表示多项式的方法 程序框架如何读入多项式读入多项式的完整程序 加…

多项式乘法问题

多项式乘法问题 实验目的&#xff1a;设计一个一元稀疏多项式简单计算器。 实验内容与要求&#xff1a; 一元稀疏多项式简单计算器的基本功能是&#xff1a; &#xff08;1&#xff09;输入并建立多项式&#xff1b; &#xff08;2&#xff09;输出多项式&#xff0c;序列…

网络协议之视频直播核心技术讲解

网络视频直播存在已有很长一段时间&#xff0c;随着移动上下行带宽提升及资费的下调&#xff0c;视频直播被赋予了更多娱乐和社交的属性&#xff0c;人们享受随时随地进行直播和观看&#xff0c;直播的打开时间和延迟变成了影响产品功能发展重要指标。 那么&#xff0c;问题来了…

直播软件搭建技术原理:CDN 与直播

直播软件搭建技术原理&#xff1a;CDN 与直播 很多直播都是基于 CDN 来实现的。而通过声网的服务&#xff0c;或基于声网SDK与 CDN 结合&#xff0c;还可以实现在直播中的连麦互动、白板同步等强调实时性的场景。本文源自社区投稿&#xff0c;介绍了该场景下的一些基础知识。如…

暑期实习+秋招面经合集(更新ing)

大纲 开篇 自我介绍 &#xff1a;面试官你好&#xff0c;我叫林飞武&#xff0c;是一名通信工程大三学生&#xff0c;对计算机专业有着浓厚兴趣并且未来有志于在互联网的测试领域有深入发展。全套学习了计算机专业的专业课&#xff0c;计算机网络&#xff0c;操作系统等&#…

DNSPod十问王征:为什么你的网站无人问津?

&#x1f4e2; DNSPod十八周年庆将至&#xff0c;下期十问交给你来提问——《你&#xff0c;十问DNSPod》&#xff01;评论区留下你想问DNSPod团队的问题&#xff0c;一旦提问被选中&#xff0c;将得到十八周年纪念T恤&#xff01;详情请移步至DNSPod公众号十八周年庆推送。 广…

阿里云ACP认证考试笔记

课件&#xff1a;https://gitee.com/HanFerm/technical-documentation/tree/master/阿里云acp教材 本文档为公开内容 一、ACP是干嘛的 内容范围&#xff1a; 历史 二、阿里云综述 技术架构 优势 三、弹性计算 ECS ECS的组成与功能 ECS是由多个并列又相互关联的产品概念组成…

在互联网上,没有人知道你是一条狗?

1993 年&#xff0c;《纽约客》&#xff08;The New Yorker&#xff09;杂志刊登一则由彼得施泰纳&#xff08;Peter Steiner&#xff09;创作的漫画&#xff1a;标题是【On the Internet, nobody knows you’re a dog.】 这则漫画中有两只狗&#xff1a;一只黑狗站在电脑椅上…

分库分表和NewSQL如何选择?分库分表真的适合你的系统吗?

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…

分库分表不一定适合你的系统,聊聊分库分表和NewSQL如何选择

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…

分库分表真的适合你的系统吗?聊聊分库分表和NewSQL如何选择

曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”已经成了处理 MySQL 数据增长问题的圣经。 面试官喜欢问&#xff0c;博主喜欢写&#xff0c;候选人也喜欢背&#xff0c;似乎已经形成了一个闭环。 但你有没有思考过&#xff0c;分库分表真的适合你的系统吗&am…

分库分表和 NewSQL 到底怎么选?

文章来源&#xff1a;【公众号&#xff1a;CoderW】 目录 背景分表分库分库分表的成本NewSQLNewSQL 平滑接入方案NewSQL 真的有那么好吗&#xff1f;NewSQL 的应用分库分表和 NewSQL 到底怎么选&#xff1f; 背景 曾几何时&#xff0c;“并发高就分库&#xff0c;数据大就分表”…

软考初级-信息处理技术员

22年下半年也是顺利通过了软考初级-信息处理技术员&#xff0c;明年再报一次软设&#xff0c;今年上半年软设下午题没过&#xff0c;总结还是代码敲的少&#xff0c;想的太多hh&#xff0c;下面来看看我总结的上午题考点&#xff0c;非常感谢我好友老郑教我指点了我excel的函数…

学术交流 | InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛

隐私计算研习社 InForSec定于2023年4月8日&#xff5e;9日&#xff08;周六、日&#xff09;在南方科技大学举办“InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛”。本次学术活动将邀请在网络空间安全顶级会议上发表论文的研究者分享他们的最新研究成果&…

用matlab绘制光滑曲线(plot画出的为折线)

x[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8] y[5 9 70 118 100 17 0 5]; 那么用plot画出的函数为折线&#xff0c;如下图&#xff1a; 要想把那个折点平滑掉。像论文中那样&#xff0c;具体采用样条函数&#xff1a;下面是样条函数的定义&#xff1a; spline function 一类分段&…