作业帮 > 综合 > 作业

用Free Pascal求任意自然数n的m次幂

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/08 15:33:47
用Free Pascal求任意自然数n的m次幂
n的m次幂
正确还另有追分
用高精度,乘方的话尽量二分.
高精度我不写了,写一个乘方的模板:
function work(m:integer):high // high表示高精度类型
var tmp:high;
begin
if m=1 then exit(n);
if m mod 2=0 then
begin
tmp:=work(m div 2);
exit(mult(tmp,tmp)); // tmp*tmp
end
else
begin
tmp:=work(m div 2);
exit(mult(tmp,mult(tmp,n))); // tmp*tmp*n
end;
end;
再问: 就是加了高精所以编晕了。。。。可以给我说一下么?谢谢了
再答: 好吧。。。 type high=array[0..1000] of integer; // 0位用来存长度 function mult(a,b:high):high; var i,j:integer; begin fillchar(mult,sizeof(mult),0); for i:= 1 to a[0] do for j:= 1 to b[0] do inc(mult[i+j-1],a[i]*b[j]); for i:= 1 to 700 do begin inc(mult[i+1],mult[i] div 10); mult[i]:=mult[i] mod 10; end; while mult[i] = 0 do dec(i); mult[0]:=i; end; 输出: procedure print(a:high); var i:integer; begin for i:= a[0] downto 1 do write(a[i]); writeln; end; 读入(一整行): procedure load(var a:high); var ch:char; t,i:integer; begin a[0]:=0; while not eof do begin read(ch); inc(a[0]); a[a[0]]:=ord(ch)-48; end; for i:= 1 to a[0] div 2 do begin t:=a[a[0]-i+1]; a[a[0]-i+1]:=a[i]; a[i]:=t; end; end; 主程序(假设第一行是n,第二行是m): var n:high; m:integer; begin load(n); readln; readln(m); print(work(m)); end. 必要的话把所有的integer改成longint;