【问题描述】
编写一个程序实现两个一元多项式相乘。
【输入形式】
首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的系数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于多项式 anxn +a n-1 x n-1 + … + a1x1 + a0x0 的输入方法如下:
an n a n-1 n-1 … a1 1 a0 0
即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。最后一项的指数后没有空格,只有一个回车换行符。
按照上述方式再输入第二个多项式。
【输出形式】
将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔,最后一项的指数后也可以有一个空格。
【样例输入】
10 80000 2 6000 7 300 5 10 18 0
3 6000 5 20 8 10 6 0
【样例输出】
30 86000 50 80020 80 80010 60 80000 6 12000 21 6300 10 6020 31 6010 66 6000 35 320 56 310 42 300 25 30 130 20 174 10 108 0
【样例说明】
输入的两行分别代表如下表达式:
10x80000 + 2x6000 + 7x300 + 5x10 + 18
3x6000 + 5x20 + 8x10 + 6
相乘结果为:
30x86000 + 50x80020 + 80x80010 + 60x80000 + 6x12000 + 21x6300 + 10x6020 + 31x6010 + 66x6000 + 35x320 + 56x310 + 42x300 + 25x30 + 130x20 + 174x10 + 108
提示:利用链表存储多项式的系数和指数。
【评分标准】
该题要求输出相乘后多项式中系数不为0的系数和指数,共有5个测试点。
【编程语言】
C/C++
链表实现一元多项式相乘
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
大榕树51 2021-12-05 11:52最佳回答 专家已采纳yright © 1999-2020, CSDN.NET, All Rights Reserved Matlab精品一篇就够 1 暗中观察|.・`) 关注 BUAA(2021春)多项式相乘 原创 2021-04-29 17:24:14 2点赞 暗中观察|.・`) 码龄1年 关注 BUAA数据结构第三次编程题——多项式相乘 看前须知 第三次上机题汇总 题目内容 问题描述 输入形式 输出形式 样例 样例说明 题解 易错点和难点 参考代码 补充测试的数据 看前须知 要点介绍和简要声明. 第三次上机题汇总 连续线段——结构体多级排序. 猴子选大王(约瑟夫问题)+3种解决约瑟夫问题的方法. 多项式相乘. 文件加密(环)——要求循环链表熟练的删除操作. 词频统计(数组或链表实现). 题目内容 问题描述 编写一个程序实现两个一元多项式相乘。 输入形式 首先输入第一个多项式中系数不为0的项的系数和指数,以一个空格分隔。且该多项式中各项的指数均为0或正整数,系数和最高幂次不会超过int类型的表示范围。对于多项式 anxn +a n-1 x n-1+…+ a1x1+ a0x0 的输入方法如下: an n a n-1 n-1 … a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。最后一项的指数后没有空格,只有一个回车换行符。 按照上述方式再输入第二个多项式。 输出形式 将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔,最后一项的指数后也可以有一个空格。 样例 【样例输入】 10 80000 2 6000 7 300 5 10 18 0 3 6000 5 20 8 10 6 0 1 2 1 2 【样例输出】 30 86000 50 80020 80 80010 60 80000 6 12000 21 6300 10 6020 31 6010 66 6000 35 320 56 310 42 300 25 30 130 20 174 10 108 0 1 1 样例说明 输入的两行分别代表如下表达式: 10x80000+ 2x6000 + 7x300 + 5x10 + 18 3x6000 + 5x20 + 8x10 + 6 相乘结果为: 30x86000 + 50x80020 + 80x80010 + 60x80000 + 6x12000 + 21x6300 + 10x6020 + 31x6010 + 66x6000+ 35x320 + 56x310 + 42x300 + 25x30 + 130x20 + 174x10 + 108 题解 易错点和难点 本题不难,主要一个是读入,一个是计算。 对于读入,我们需要用do while来进行读入,在读入的过程中,顺便记录多项式的项数。 对于计算,有一个需要注意的一点,就是可能会出现很多的指数相同的项,所以我们计算(系数相乘,指数相加)完后,我们需要进行去重操作。但是此处有技巧,如果有指数相同的项,我们只需要保留第一项即可,如果不是,可能会造成不必要的麻烦。 参考代码 #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<ctype.h> struct expression{ //多项式结构体 int coe; //系数 int pow; //指数 }; typedef struct expression ex; ex a[2000],b[2000],c[2000];//a是第一个多项式,b是第二个多项式 ,c是最后相乘的多项式 int cmp(const void*p1,const void*p2); int main() { int i,j,k=0; int n=0,nn=0;//n是第一个多项式的项数 ,nn是第二个多项式的项数 char ch; do //读入第一个多项式 { scanf("%d%d%c",&a[n].coe,&a[n].pow,&ch); n++; }while(ch!='\n'); do //读入第二个多项式 { scanf("%d%d%c",&b[nn].coe,&b[nn].pow,&ch); nn++; }while(ch!='\n'); qsort(a,n,sizeof(ex),cmp); //按指数排序 qsort(b,nn,sizeof(ex),cmp); //按指数排序 for(i=0;i<n;i++) { for(j=0;j<nn;j++) { c[k].coe=a[i].coe*b[j].coe;//系数相乘 c[k].pow=a[i].pow+b[j].pow;//指数相加 k++; } } qsort(c,k,sizeof(ex),cmp);//根据指数排序 for(i=0;i<k;i++) { if(c[i].pow == c[i+1].pow && c[i].pow!=0)//指数一样的进行去重操作 { c[i+1].coe+=c[i].coe;//指数一样的进行去重操作 c[i].coe=0;//去重项系数设为零 } } qsort(c,k,sizeof(ex),cmp);//根据指数排序 for(i=0;i<k;i++) { if(c[i].coe==0)//去重项不输出 { continue; } else { printf("%d %d ",c[i].coe,c[i].pow);//输出 } } return 0; } int cmp(const void*p1,const void*p2) { struct expression *a=(struct expression*)p1; struct expression *b=(struct expression*)p2; return b->pow-a->pow; }
采纳该答案 已采纳该答案 专家已采纳评论解决 1 无用打赏举报 编辑记录微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2021-12-05 11:08回答 1 已采纳 yright © 1999-2020, CSDN.NET, All Rights Reserved Matlab精品一篇就够 1 暗中观察|.・`) 关注 BUAA(2021春)多项式
- 2017-03-13 12:35回答 1 已采纳 http://www.icourses.cn/jpk/viewCharacterDetail.action?courseId=4246§ionId=35341
- 2018-11-06 03:04回答 2 已采纳 add()函数中while循环p!=NULL以及q!=NULL出错,实际上p和q在取完链表输入的正确值后链表并没有指向NULL。 可选解决方案:在createlista()与createlistb(
- 2017-08-22 16:27通过C语言实现多项式的相加,相乘等操作
- 2020-11-18 20:41LLLLQZ的博客 一元多项式运算——链表实现1、说明:2、代码实现 1、说明: 链表的应用之一:一元多项式运算,这里先说明一元多项式加法,减法类同 ![在这里插入图片描述]...
- 2020-10-31 14:58胡澳治的博客 7-2 一元多项式的乘法与加法运算 求一元多项式的和与积 PTA数据结构与算法题目集【中文】第二道编程题 **用单链表处理,代码量较多,我的注释尽量写的仔细,没有优化代码,注意去其糟粕~希望提出建议 ** #include &...
- 2015-10-16 17:37回答 2 已采纳 http://www.cnblogs.com/wwj9413/archive/2011/10/22/2292808.html
- 2018-04-02 16:29回答 1 已采纳 void Link:: Add(Node*L1,Node*L2) { Node*pre=L1,*p=pre->next; Node*qre=L2,*q=qre->next,*v;
- 2021-04-11 13:51回答 2 已采纳 PolyCreate(la,n); 在调用这个函数前, 要先初始化 la,给它空间。
- 2022-03-27 19:43奔走的月光的博客 教你学会如何用链表实现一元多项式的加减。
- 2022-04-06 16:56小羊是只喵的博客 题目来源:PTA 数据结构与算法题目集(中文)7-2 一元多项式的乘法与加法运算 (20 分) 一、程序结果 二、实现步骤与程序说明 1.问题分析 题目涉及稀疏多项式的运算,相较于顺序存储结构,采用链式存储结构更为灵活...
- 2021-05-19 16:16笑以苛的博客 一、概述通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数降序排列。二、需求分析建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减...
- 2022-02-08 13:22回答 2 已采纳 假设qa开始是3x^2(x加上去为了好看),qb开始是2x^3,那么这种情况是先打印qa的,因为2比3小,也就是add里面的m<n小的情况,因为qa已经打印,因此qa=qa next,qb还没动
- 2020-03-27 17:35回答 2 已采纳 //定义节点类 class Node{ public int coef;//系数 public int exp;//指数 public Node next=null;
- 2018-10-17 01:43回答 1 已采纳 polynode::polynode(const polynode &p) { int k = p.number; poly temp,head,rear; temp= (p.head)
- 2020-06-17 23:38#include> #include> #... /* 单项链表的声明 */ typedef struct PolynNode{ int coef; // 系数 int expn; // 指数 struct PolynNode *next; }PolynNode*PolynList; /* 正位序 (插在表尾 )输入 n 个元素的值建立带表头
- 2017-05-17 22:33章鱼bro的博客 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出...
- 2021-05-04 09:32SogK1997的博客 线性结构(下)2.3 队列及实现队列的顺序存储实现循环队列队列的链式存储实现2.4应用实例:多项式加法运算多项式加法运算Compare()函数Attach()函数求和函数⭐2.5 小白专场:一元多项式的加法与乘法运算求解思路...
- 2020-03-20 08:54回答 1 已采纳  ``` #include #include
- 2018-12-01 10:38rustfree的博客 一、程序任务 设计构造两个链式线性表,用来... 两个多项式相乘 二、编程思路 【创建链表】先分别输入两个多项式的项数以及调用Createlist()函数按降幂顺序输入各项的系数和次数,构建出两个多项式的链表。两...
- 没有解决我的问题, 去提问