【pascal】求2的15次方和32的阶级。我是初学者程序最好越简单越好。谢。
分析:
Problem 1
2^15 大概是多大的一个数呢?用数学知识,它的位数为:
因此,完全用不到今后可能会学的“高精度乘法”,直接计算好了。
提供两种方法:
一种是用循环,i 从1到15 循环,s作为累乘变量,每次都自乘2:
program ex1_1;
var i,s:longint;
begin
s:=1;
for i:=1 to 15 do
s:=s*2;
writeln(s);
end.
第二种,用Pascal 内部的 power 乘方函数:
program ex1_2;
uses math; //调用数学库;
begin
writeln(trunc(power(2,15)));
end.
第二个很简单?
Problem 2
是计算32的阶乘吗?
阶乘是一个定义的数学符号,32的阶乘写作 32!,等于32×31×30×……×1,
32!大概有多大呢?
按一下计算器,显示:
很大的一个数,而最大的整型数 qword 也只有18446744073709551615(别数了,有20位),不够存!
因此必须用 高精度乘法 ,程序“越简单越好”是不太可能的。
下面附代码:
var a:array[1..90]of longint;
n,i,j,ans,mark:longint;
procedure findmark;
var i:longint;
begin
for i:=90 downto 1 do
if a[i]>0 then
begin
mark:=i;
exit;
end;
end;
begin
a[1]:=1;
readln(n);
for i:=2 to n do
begin
ans:=0;
mark:=mark+2;
for j:=1 to mark+2 do
begin
a[j]:=a[j]*i+ans;
ans:=a[j] div 10;
a[j]:=a[j] mod 10;
end;
end;
findmark;
for i:=mark downto 1 do
write(a[i]);
writeln;
end.
这个代码其实不太优化,你可以上网找一些。
希望对LZ有帮助,望采纳,谢谢。
(附件中有上述三个代码的.pas文件,如果LZ装了FPC编译器,可以运行一下,看看结果)