计算n的阶乘和2的n次方的算法及复杂度分析

哪个高手帮忙啊 后天就要考试啦!!!紧急!!!
最好发送到[email protected]
谢谢啊!!!

第1个回答  2007-01-05
阶乘很简单啊
function factorial(n:integer):longint;
var
i:integer;
s:longint;
begin
s:=1;
for i := 2 to n do
s:=s*n;
factorial:=s
end;
时间O(n)
空间O(n)

2的n次方就更简单了,一个表达式
s:=exp(ln(2)*n);
如果你怕real和integer/longint的问题,那就该成s:=round(exp(ln(2)*n));
因为2^n=e^(ln2^n)=e^(ln2*n)
时间O(1)
空间O(1)本回答被网友采纳
第2个回答  2007-01-05
n的阶乘
main()
{int i,s=1,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d",s);
}

2的n次方
main()
{int i,s=1,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
s*=2;
printf("%d",s);
}
相似回答