谁帮忙解读一下这个pascal程序

问题描述:

谁帮忙解读一下这个pascal程序
多项式 ( Polynomial )
(poly.pas/in/out)
一个 n (1≤ n≤ 100) 次整系数多项式x^n+a1*x(n-1)+……+an*x^0 ,已知它的 n 个非正整数根,求方程的系数.
输入格式:
从文件POLY.IN读入数据.文件第一行有一个正整数n.第二行有 n 个非正整数,分别为方程的根 ,这些数不小于-100.
输出格式:输出到文件POLY.OUT,第 i 行为 ai .结果保证不超过 10^30
样例一
POLY.INP
2
-3 –2
POLY.OUT
5
6
样例二
POLY.INP
4
0 -1 -2 -3
POLY.OUT
6
11
6
0
program poly;
var
f:array[0..100]of int64;
a:array[0..100]of longint;
i,j,n:longint;
tot:int64;
procedure dfs(num,k:longint;ans:int64);
var
j:longint;
begin
if k=i then
begin
inc(f[i],ans);
exit;
end;
for j:=num+1 to n do dfs(j,k+1,ans*a[j]);
end;
begin
assign(input,'poly.in');assign(output,'poly.out');
reset(input);rewrite(output);
readln(n);tot:=1;
for i:=1 to n do
begin
read(a[i]);
tot:=tot*a[i];
f[i]:=0;
end;
f[n]:=tot;
for i:=n-1 downto 1 do
dfs(0,0,1);
for i:=1 to n do writeln(abs(F[i]));
close(input);close(output);
end.
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
提供一个数学的相关的定理吧:
对于一个方程,若他有N次,且有N个实根,那么,设主元为X,则方程可以写为:
(x-a1)(x-a2)(x-a3).(x-an)=0
而这个程序做的事就是把这个方程展开.用递归(DFS)实现的.
自己理解理解吧...
顺便说下,这个输出是默认最高项为1
 
 
展开全文阅读
剩余:2000