阶乘有几种算法?
阶乘有几种算法啊,我只会用递归。
请各位高手帮我写下递推和其他几种算法,谢谢了
问题点数:10、回复次数:6Top
1 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-03-29 22:43:26 得分 0
fun(int n)
{
if (n==0 || n==1 )
return 1;
else return n * fun(n-1);
}
Top
2 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-29 22:45:46 得分 0
forTop
3 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-03-29 22:50:50 得分 10
fun(int n)
{
int s=1;
for(int i=1; i<=n; i++)
{
s=s*i;
}
return s;
}
Top
4 楼Dragon132(飞龙在天)回复于 2006-03-29 23:26:30 得分 0
阶乘要考虑大数的
要不能算的很少Top
5 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-03-29 23:44:42 得分 0
//大数就大数
//此算法用数组来求N!的
#include "stdio.h"
#define N 5
int main()
{
int digit=1; //数组的位数
int data[40]; //存储40位数的数组
for(int i=1 ; i < 40 ; i++ ) //数组初始为0
{
data[i]=0;
}
data[0]=1; //数组的第一位为1
for( i=1; i<=N; i++)
{
for(int j=1 ; j<=digit; j++) //对数组中的每一位乘以i
data[j-1]*=i;
for( j=1 ; j<=digit; j++)
if( data[j-1] > 10 ) //若有一位数大于10
{
for(int k=j-1; k<=digit; k++)
{
if( data[digit-1]>10 ) //若最高为大于10,则多加一位
digit++;
data[k+1]+=data[k]/10;
data[k]%=10;
}
}
}
for( i=digit; i>=1; i--) //输出数组中的内容,既值
printf("%d",data[i-1]);
return 0;
}
Top
6 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-03-29 23:46:50 得分 0
这是以前学算法的时候写的.
现在可不行了,手和脑都苯了Top




