在1s内求2的N次方(n小于等于50000),位运算+快速幂+高精度,pasca

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

var

k,n,i,j,top:longint;

a,b:array[0..30000] of longint; procedure mul;

var

i,j:longint;

a:array[0..30000] of longint; begin

fillchar(a,sizeof(a),0);

for i:=1 to top do

for j:=1 to top do

a[i+j-1]:=a[i+j-1]+b[i]*b[j]; for i:=1 to top*2-1 do

b[i]:=a[i];

top:=top*2-1;

for j:=1 to top-1 do

begin

b[j+1]:=b[j] div 10+b[j+1];

b[j]:=b[j] mod 10;

end;

while b[top]>=10 do

begin

b[top+1]:=b[top] div 10;

b[top]:=b[top] mod 10;

inc(top);

end;

end;

begin

readln(n);

i:=0;

while n>0 do

begin

inc(i);

a[i]:=n mod 2;

n:=n div 2;

end;

top:=1;

b[1]:=1;

k:=i;

for i:=k downto 1 do

begin

mul;

if a[i]=1 then

begin

for j:=1 to top do

b[j]:=b[j]*2;

for j:=1 to top-1 do

begin

b[j+1]:=b[j] div 10+b[j+1];

b[j]:=b[j] mod 10;

end;

while b[top]>=10 do

begin

b[top+1]:=b[top] div 10;

b[top]:=b[top] mod 10;

inc(top);

end;

end;

end;

for i:=top downto 1 do

write(b[i]);

writeln;

end.

相关文档
最新文档