在1s内求2的N次方(n小于等于50000),位运算+快速幂+高精度,pasca由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“快速幂算法求a的n次方”。
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.