两个一元多项式相乘的算法
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/24 04:20:09
两个一元多项式相乘的算法
不是程序,就是用基本操作组合起来的那种,要用链表储存的
不是程序,就是用基本操作组合起来的那种,要用链表储存的
把一个多项式的系数存在数组a里.a[i]表示x^i的系数
把另一个多项式的系数存在数组b里.b[i]表示x^i的系数
那么 for i = 1 to n for j = 1 to m c[i+j] += a[i] * b[j] //代表ax^i * bx^j = ab * x^(i+j)
c数组就存储了答案多项式的系数.
再问: 要用链表,而且乘完以后还要排序,帮我写一下具体算法嘛,大神
再答: 您用链表是神马心态……如果单纯是练习链表的话还是写最经典的约瑟夫问题吧。这题用链表好像挺麻烦。其实数组就是存储地址相邻的链表.如果要考察对地址的理解,那还是写成这样吧……简化了读入,您可以把您的需求说的具体点#include <cstdio>
#include <cstdlib>
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int a[1000];
int b[1000];
for (int i = n; i >= 0; --i) scanf("%d", a+i);
for (int i = m; i >= 0; --i) scanf("%d", b+i);
int c[2000];
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= m; ++j)
*(c+i+j) += *(a+i) * *(b+j);
for (int i = n+m; i > 0; --i)
if (*(c+i))
if (*(c+i) == 1)
printf("x^%d + ", i);
else
printf("%dx^%d + ", *(c+i), i);
printf("%d\n", *c);
system("pause");
return 0;
}
再问: 只写算法,数据结构的算法,不用写程序,一元多项式的加法算法看懂了,乘法写不来
再答: 设(3x^2 + 2x + 1) * (4x^2 +3 x + 1)
那么a数组 a[0] = 1, a[1] = 2, a[3] = 3
b数组b[0] = 1, b[1] = 3, b[3] = 4
那么我们模拟手工乘法
首先拿第一个式子的1和第二个式子的1, 3x, 4x^2分别乘
首先1*1 = 1, x的指数是0,那么c[0] = c[0] + 1 表示加了1个x^0
1*3x = 3x, x的指数是1, 那么c[1] = c[1] + 3 表示加了3个x^1
1*4x^2 = 4^2, x的指数是2, 那么c[2] = c[2] + 4 表示加了4个x^2
再拿第一个式子的2x和第二个式子的1, 3x, 4x^2分别乘……
……
结合着程序就能看懂了
再问: void MultiplyPolyn(polynomial &Pa,polynomial &Pb) pa=pa*pb,直接把值相乘所得值给pa了,乘完之后还要对所得的m*n个多项式排序,太难了
再答: polynomial应该是自己写的一个类吧。
思路还是和上面一样的,就是多项式封装起来。至于排序,用sort, 自己写一个比较函数, 不知道您是要按什么排?这些可能对您有帮助 http://zhidao.baidu.com/question/40060541.htmlhttp://read.pudn.com/downloads8/sourcecode/others/22599/Polynomial/Polynamial.cpp__.htm这个代码是工程型的了,他用了链表。
把另一个多项式的系数存在数组b里.b[i]表示x^i的系数
那么 for i = 1 to n for j = 1 to m c[i+j] += a[i] * b[j] //代表ax^i * bx^j = ab * x^(i+j)
c数组就存储了答案多项式的系数.
再问: 要用链表,而且乘完以后还要排序,帮我写一下具体算法嘛,大神
再答: 您用链表是神马心态……如果单纯是练习链表的话还是写最经典的约瑟夫问题吧。这题用链表好像挺麻烦。其实数组就是存储地址相邻的链表.如果要考察对地址的理解,那还是写成这样吧……简化了读入,您可以把您的需求说的具体点#include <cstdio>
#include <cstdlib>
int main()
{
int n, m;
scanf("%d%d", &n, &m);
int a[1000];
int b[1000];
for (int i = n; i >= 0; --i) scanf("%d", a+i);
for (int i = m; i >= 0; --i) scanf("%d", b+i);
int c[2000];
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= m; ++j)
*(c+i+j) += *(a+i) * *(b+j);
for (int i = n+m; i > 0; --i)
if (*(c+i))
if (*(c+i) == 1)
printf("x^%d + ", i);
else
printf("%dx^%d + ", *(c+i), i);
printf("%d\n", *c);
system("pause");
return 0;
}
再问: 只写算法,数据结构的算法,不用写程序,一元多项式的加法算法看懂了,乘法写不来
再答: 设(3x^2 + 2x + 1) * (4x^2 +3 x + 1)
那么a数组 a[0] = 1, a[1] = 2, a[3] = 3
b数组b[0] = 1, b[1] = 3, b[3] = 4
那么我们模拟手工乘法
首先拿第一个式子的1和第二个式子的1, 3x, 4x^2分别乘
首先1*1 = 1, x的指数是0,那么c[0] = c[0] + 1 表示加了1个x^0
1*3x = 3x, x的指数是1, 那么c[1] = c[1] + 3 表示加了3个x^1
1*4x^2 = 4^2, x的指数是2, 那么c[2] = c[2] + 4 表示加了4个x^2
再拿第一个式子的2x和第二个式子的1, 3x, 4x^2分别乘……
……
结合着程序就能看懂了
再问: void MultiplyPolyn(polynomial &Pa,polynomial &Pb) pa=pa*pb,直接把值相乘所得值给pa了,乘完之后还要对所得的m*n个多项式排序,太难了
再答: polynomial应该是自己写的一个类吧。
思路还是和上面一样的,就是多项式封装起来。至于排序,用sort, 自己写一个比较函数, 不知道您是要按什么排?这些可能对您有帮助 http://zhidao.baidu.com/question/40060541.htmlhttp://read.pudn.com/downloads8/sourcecode/others/22599/Polynomial/Polynamial.cpp__.htm这个代码是工程型的了,他用了链表。
如何用C语言实现两个一元多项式的相加和相乘?
两个以单链表作存储结构的一元多项式A和B,编写算法将多项式A和B相加,要求利用原表的结点空间和多项式.
设计算法实现一元多项式的简单运算.
两个一元多项式相加
关于数据结构单链表的题,给定两个多项式,实现多项式的相加算法,
数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加运算
两个多项式相乘乘积中含有x的三次项的系数
多项式相乘请大家帮个忙,下列多项式相乘,要有算法,算出两三题也可以:(1)下列计算正确的是:(A)(xy - x^2·y
多项式与多项式相乘
求这两个方程的解 要个简便算法 这两个方程普通解会出一元三次方程 一元
单项式与多项式相乘的计算
一道单项式与多项式相乘的题目