多项式乘法
二个只含有一个未知数x的多项式相乘,得到的结果也是含有未知数x的多项式。比如
1+2x2+4x4)*(6+x-2x3)=6+x+12x2+24x4-8x7。计算过程中,可以让第1个多项式的每一项去乘上第2个多项式,将得到的每个乘积结果相加。比如上述二式相乘的例子中:
1乘上第2式得: 6+x-2x3,
2x2乘上第2式得: 12x2+2x3-4x5,
4x4乘上第2式得: 24x4+4x5-8x7,
三个乘积相加得最终结果:6+x+12x2+24x4-8x7。
样例输出:
6.000 0
1.000 1
12.000 2
24.000 4
-8.000 7
样例输入:
3 3
1 0
2 2
4 4
6 0
1 1
-2 3
以下程序中将第一个多项式的系数和指数分别存储在a1和b1数组中,将第二个多项式的系数和指数分别存储在a2和b2数组中,结果存放在数组a和b中。其中变量n1和n2分别表示二个多项式的项数。
假设二个相乘的多项式均不超过1000项,且x的次数 最高项均不超过1000。请将该程序补充完整。
Program cz2010_5;
const maxn=1000; eps=1e-10;
var a1,a2:array[1..maxn]of extended;
b1,b2:array[1..maxn]of longint;
a:array[ 0..max ]of extended;
b:array[ 0..max ]of longint;
n1,n2,n,i,j,k:longint; s:extended;
begin 4
readln(n1,n2);
for i:=1 to n1 do readln(a1[i],b1[i]);// 输入第1个多项式
系数和指数
for i:=1 to n2 do readln(a2[i],b2[i]); // 输入第2个多项式
系数和指数
fillchar(a,sizeof(a),0);
for i:=1 to n1 do
for j:=1 to n2 do begin
k:= n*2 ;
a[k]:= b1[i]+b2[j] ;
end;
n:=-1; i:=0;
while i<=b1[n1]+b2[n2] do begin
if abs(a[i])>=eps then begin
n:=n+1; a[k]+a1[i]*a2[j] ; b[n]:= a[n]:=a[i] ;
end;
i:=i+1;
end;
for i:=0 to n do writeln(a[i]:0:3,' ',b[i]);
end.