用Free Pascal求任意自然数n的m次幂
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/19 14:34:02
用Free Pascal求任意自然数n的m次幂
n的m次幂
正确还另有追分
n的m次幂
正确还另有追分
![用Free Pascal求任意自然数n的m次幂](/uploads/image/z/15782692-4-2.jpg?t=%E7%94%A8Free+Pascal%E6%B1%82%E4%BB%BB%E6%84%8F%E8%87%AA%E7%84%B6%E6%95%B0n%E7%9A%84m%E6%AC%A1%E5%B9%82)
用高精度,乘方的话尽量二分.
高精度我不写了,写一个乘方的模板:
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;
高精度我不写了,写一个乘方的模板:
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;
pascal 输入任意两个自然数M和N,求两个自然数M和N的最大公约数和最小公倍数
pascal 输入任意两个自然数M和N,求两个自然数M和N的最大公约数和最小公倍数?
.求两个自然数M和N的最小公倍数.pascal
求任意五个自然数的最小公倍数 pascal
pascal语言 求n个自然数的最大公约数和最小公倍数
pascal求定义一函数fz3,求1—n之间3的倍数之和.定义一函数fz5,求任意自然数n的各位数字之和.
用Free Pascal 做 求两个正整数的最大公约数
求一道free pascal题目的源代码
求 free Pascal
求Free Pascal程序
Free Pascal 和Pascal的区别?为什么竞赛都用Free Pascal?
求极限--(X的M次幂——1)/(X的N次幂—1)(M,N为自然数)