完善程序PASCAL

来源:百度知道 编辑:UC知道 时间:2024/06/05 17:23:02
求实数经的整数幂 。
这是一道看似很简单的问题,只要学过FOR语的同学都会做:一种直接的做法是对x用迭代的方法自乘n次,形如for i:=1 to n do s:=s*x,但这种方法十分低效,因这它需要n次乘法,时间复杂度为 。一个高效的方法可以用如下方法推出,令m= ,假设已经知道如何计算 。那么有两种情况:如果n是偶数,那么 ;否则 ,我们可以用重复平方的方法来进行迭代,从而使时间复杂度降为 。
Const

maxn=100;
var
n,j,k:longint;
x,y:extended;
a:array[1..maxn] of integer;
begin
readln(x,n);
k:=0;
while n<>0 do
begin
① ;
a[k]:=n mod 2;
n:=n div 2;
end;
② ;
for j:=k downto 1 do
begin
y:= ③ ;
if ④ then y:=y*x;
end;
writeln(y)
end.

1.填 k:=k+1(或inc(k)),这里k是累加变量。
2.填 y:=1, 累乘积变量初始化。
3.填 y*y 迭代相乘
4.填 a[j]=1 如果n为奇数时,再乘一次x.

yes good

1.填 k:=k+1(或inc(k)),这里k是累加变量。
2.填 y:=1, 累乘积变量初始化。
3.填 y*y 迭代相乘
4.填 a[j]=1 如果n为奇数时,再乘一次x.

a
s
dfg